设计原则那些事儿
代码架构的设计原则中最普遍的是solid原则。
SRP Single Responsibility Principle 单一责任原则
OCP Open Closed Principle 开放封闭原则
LSP Liskov Substitution Principle 里氏替换原则
ISP Interface Segregation Principle 接口分离原则
DIP Dependency Inversion Principle 依赖反转原则
◆ OCP:开放封闭原则(Open Closed Principle)
软件实体(类,模块,函数等等)应当对扩展开放,对修改闭合。
这其实就是要关注,增加新的功能的时候能不能不修改以前旧代码?
增加新功能,需要大改旧代码,说明没做好开放封闭原则。
◆ LSP:里氏替换原则(Liskov Substitution Principle)
模块之间应能自由替换。
其实就是替换别的模块的时候不应该影响别的模块,导致发生修改事项。
◆ ISP:接口分离原则(Interface Segregation Principle)
如果一个接口包含了过多的方法,应该通过分离接口将其拆分。
如果依赖和自己没有关系或不需要的东西,需要应该把他拆分,只依赖和自己有关系的不分。
◆ DIP:依赖反转原则(Dependency Inversion Principle)
上层(抽象)不应该依赖于下层(实体),下层(实体)应该依赖于上层(抽象)。
换句话说上层策略性代码不应该依赖底层细节性代码,
底层细节性代码应该依赖上层策略性的代码。
包的内聚性三原則
◆ REP:复用/发布等同原则(Release Reuse Equivalency Principle)
复用的粒度就是发布的粒度,重用的包需要版本管理,使新版本发布后还可以继续使用老版本。
不应该通过复制粘贴代码来复用,应该通过能发布的包复用代码。
◆ CCP:共同闭包原则(Common Closure Principle)
将那些因相同原因同时发生变化的类集合到组件中。
有相同改变原因放入同一個组件。 告诉我们哪些应该放在一起,倾向于把组件个体变大。
◆ CRP:共同复用原则(Composite Reuse Principle)
不要强迫依赖他们不需要的东西,
一个包中的所有类应该是共同重用的,如果重用了包中的一个类,就应该重用包中的所有类。
为了不必要的发布,切分没有关联的功能。 告诉我们哪些不一应该放在一起,倾向于把组件个体变小。
包的耦合性三原则
◆ ADP:无依赖环原则(Acyclic Dependencies Principle)
组件或包的依赖关系图中不允许存在环。
不要出现以下情况 A -> B -> C -> A
◆ SDP:稳定依赖原则(Stable Dependencies Principle)
依赖关系必须指向更稳定的方向
不稳定的依赖稳定的,稳定的不要依赖不稳定的。
◆ SAP:稳定抽象原则(Stable Dependencies Principle)
组件或包的抽象程度应该和其稳定程度一致
越抽象的应该是越稳定的。
欢迎大家的意见和交流
email: li_mingxie@163.com