每个人都有义务捍卫、遵守或完善原则。原则可以修改,但不能肆意妄为。 —— 瑞·达利欧《原则》

所谓原则,就是一套前人通过经验总结出来的,可以有效解决问题的指导思想与方法论。

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/