【笔记】软件工程设计原则

每次看到这些 principles, 总能多一些体会.

单一职责原则(Simple responsibility pinciple, SRP).

这在 Unix 文化中展现的淋漓尽致. 提炼职责是关键, 提炼重复的代码, 提炼相似的业务, 乃至提炼对领域模型的抽象.

依赖倒置原则(Dependence Inversion Principle, DIP).

Program to an interface, not an implementation. 上层不依赖底层的实现, 接口的设计很重要.

合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP).

尽量使用聚合/组合, 而非继承. 继承带来了更多的复杂度, 而且组件形式的代码更易复用.

开-闭原则(Open-Closed Principle, OCP).

对扩展开放, 对修改关闭. 举个例子, 增加功能时只需要对模块进行扩展, 保持模块的稳定性, 无需修改模块的内部实现. 这是 OO 的基础.

里氏代换原则(Liskov Substitution Principle, LSP).

继承子类可以替换基类, OO的多态与继承的基础.

接口隔离原则(Interface Segregation Principle, ISP).

一个类对另外一个类的依赖建立在最小的接口上, 面向接口的设计, 同时努力避免太多依赖.

迪米特法则(Law of Demeter, LoD).

又叫做最少知识原则(Least Knowledge Principle, LKP). 一个对象应当对其他对象了解的越少越好. 跟 ISP 的思想比较类似.