第二周总结

用户头像
倪惠华
关注
发布于: 2020 年 06 月 17 日

总结下本周学习的个设计原则,这里记录下



1 单一职责原则(SRP)

一个类只负责完成一个职责或者功能。不要设计大而全的类,要设计粒度小、功能单一的类。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。

2 开放封闭原则(OCP)

添加一个新的功能,应该是通过在已有代码基础上扩展代码(新增模块、类、方法、属性等),而非修改已有代码(修改模块、类、方法、属性等)的方式来完成。关于定义,我们有两点要注意。第一点是,开闭原则并不是说完全杜绝修改,而是以最小的修改代码的代价来完成新功能的开发。第二点是,同样的代码改动,在粗代码粒度下,可能被认定为“修改”;在细代码粒度下,可能又被认定为“扩展”。



3 里氏替换原则(LSP)

里式替换原则是用来指导,继承关系中子类该如何设计的一个原则。理解里式替换原则,最核心的就是理解“design by contract,按照协议来设计”这几个字。父类定义了函数的“约定”(或者叫协议),那子类可以改变函数的内部实现逻辑,但不能改变函数原有的“约定”。这里的约定包括:函数声明要实现的功能;对输入、输出、异常的约定;甚至包括注释中所罗列的任何特殊说明。



4 接口隔离原则(ISP)

“接口”理解为一组接口集合,可以是某个微服务的接口,也可以是某个类库的接口等。如果部分接口只被部分调用者使用,我们就需要将这部分接口隔离出来,单独给这部分调用者使用,而不强迫其他调用者也依赖这部分不会被用到的接口。



5 依赖倒置原则(DIP)

依赖反转原则也叫作依赖倒置原则。这条原则跟控制反转有点类似,主要用来指导框架层面的设计。高层模块不依赖低层模块,它们共同依赖同一个抽象。抽象不要依赖具体实现细节,具体实现细节依赖抽象。



这里面依赖倒置、里氏替换、开闭原则在具体的实现上都用到了多态。理解多态特性可以较好的实际这些设计原则



疑惑点:

通过策略模式替换if else。比如一个函数中调用了一个远程服务。这个远程服务会返回好几种错误。针对不同错误会执行不同的策略。确定走哪种策略之前要判断是哪种类型的异常。这个地方还是会有if else,这里是否合理。可以想到的定义一个错误后置处理接口,然后有不同实现。将错误类型与后置处理的对应关系放在一个map中。出现错误是通过if/else判断出是哪种类型错误,取出对应的后置处理实现类,执行业务逻辑。



有更好的实现方案,期待老师、助教解答





用户头像

倪惠华

关注

还未添加个人签名 2018.05.08 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
我觉得有两个点:
一是错误返回应该用错误码统一,不要依赖各种字段单独判断。
二是错误码统一的情况下,错误码->函数的map就可以清晰地定义策略了。
2020 年 06 月 21 日 09:48
回复
没有更多了
第二周总结