每个人都有义务捍卫、遵守或完善原则。原则可以修改,但不能肆意妄为。 —— 瑞·达利欧《原则》
所谓原则,就是一套前人通过经验总结出来的,可以有效解决问题的指导思想与方法论。
SOLID
SOLID
- Single Responsibility Principle(SRP):单一职责原则
- Open Close Principle(OCP):开闭原则
- Liskov Substitution Principle(LSP):里氏替换原则
- Interface Segregation Principle(ISP):接口隔离原则
- Dependency Inversion Principle(DIP):依赖倒置原则
SOLID 原则之间并不是相互孤立的,彼此之间存在着一定关联,一个原则可以是另外一个原则的加强或基础;违反其中一个原则,可能同时违反了其他原则。其中,开闭原则和里氏替换原则是设计目标;单一职责原则、接口隔离原则和依赖倒置原则是设计方法。
单一职责原则(SRP)
任何一个软件模块中,应该有且只有一个被修改的原因。
就一个类而言,应该仅有一个引起它变化的原因。
在 SRP 中,我们把职责定义为“变化的原因”(a reason for change)
开闭原则(OCP)
软件实体应该对扩展开发,对修改关闭。
软件实体(类、模块、函数等等)应该是可以扩展的,但是不可修改的。
里氏替换原则(LSP)
程序中的父类型都应该可以正确地被子类型替换。
子类型(subtype)必须能够替换掉它们的基类型(base type)。
接口隔离原则(ISP)
多个特定客户端接口要好于一个宽泛用途的接口。
接口隔离原则认为不能强迫用户去以来那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口要好。
不应该强波客户依赖它们不用的方法。
依赖倒置原则(DIP)
模块之间的交互应该依赖抽象,而非实现。
DIP 要求高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖细节,细节应该依赖抽象。
A. 高层模块不应该依赖于底层模块,二者都应该依赖于抽象。
B. 抽象不应该依赖于细节,细节应该依赖于抽象。
其他原则
DRY
DRY 是 Don’t Repeat Yourself 的缩写,DRY 原则特指在程序设计和计算中避免重复代码,因为这样会降低代码的灵活性和简洁性,并且可能导致代码之间的矛盾。
YAGNI
YAGNI(You Ain’t Gonna Need It)的意思是“你不会需要它”。
YAGNI 是针对“大设计”(Big Design)提出来的,是“极限编程”提倡的原则,是指你自以为有用的功能,实际上都是用不到的。
Rule of Three
Rule of Three 也被称为“三次原则”,是指当某个功能第三次出现时,就有必要进行“抽象化”了。
KISS
KISS(Keep It Simple and Stupid)认为好的目标不是越复杂越好,反而是约简洁越好。
POLA 原则
POLA(Principle Of Least Astonishment)是最小惊奇原则。
参考:
1、代码精进之路 https://book.douban.com/subject/34922776/
2、敏捷软件开发 https://book.douban.com/subject/1140457/
