架构师训练营第二周总结
对于SOLID设计原则的总结
Single Responsibility Principle
单一职责原则,即一个类的功能做的事应该尽可能的少. 它的功能和实现可能是复杂的,但就职责而言应该是简单的. 有的说法是,一个类应该有且只有一个原因使它改变.
从后者的角度,按照单一职责设计的类,在面对频繁的改变的变更的时候会更好维护.如果一个类有多个职责,
那么其中任一一个变更则会引起该类的变化,听起来还行嘛,一个类变化,改就完事了.但是变化将会沿着依赖的反方向进行传递,也就是说依赖这个类的类也会发生变化,而依赖的类的变化又会引起更上层的类的变化,这样一直传递下去. 这样变化就会非常多了,使得一个小小的需求变更可能使得修改工作量很大.
一个遵守单一职责的类将会更加容易理解,更加容易实现,降低bug出现的可能性,提高开发速度.
当面对需求变更而要修改一个类的时候,可以问自己一个问题,这个类的功能是什么?如果答案是....和...,那就违反了SRP,应该考虑是否有更优的方法去实现需求.
Open/Closed Principle
开闭原则:对扩展开放,对修改封闭
开闭原则显而易见的一个好处是利于测试,如果一个类原有的代码很少的修改,那么就不用花很多精力去做回归测试.
Liskov Substitution Principle
里氏替换原则
这个原则由Barbara Liskov 提出,可以表述为子类可以代替其父类
这个听上去理所当然,但其实我们很多代码是不遵循里氏替换原则的,即子类不能替换父类,
经典的例子
父类长方形输出12,但是子类会输出16,因此子类和父类的行为不一致,其实这里并不能用继承.
Interface Segregation
接口隔离原则: 用户不应该被强制依赖不需要的接口
SRP和接口隔离的目的一样,通过将软件分隔成独立的部分,即隔离,来尽量减小变化的副作用
实践中,接口隔离原则很难遵守,因为有时候要增加一个feature,在原来的接口里加一个方法是很自然的事情.一不注意就污染了接口,破坏了接口隔离原则.
Dependency Inversion Principle
依赖反转
低层模块进行具体逻辑的实现,高层模块调用低层模块,这是非常自然的,在实际代码编写中就会很自然的使得高层模块依赖低层模块.
有一个说法很有意思,变化将向依赖的反方向传递. 如果低层模块发生了变化,将会沿着依赖的反方向传递到高层.从而高层模块也发生相应的变化.除此之外,高层依赖低层,高层的可服用性也会降低.
依赖倒置有两个原则
1.高层不直接依赖低层,低层和高层应该都依赖与抽象
2.抽象不依赖于细节,细节应该以来于抽象.
评论