SOLID原则
- 单一责任原则(SRP)
- 开放/封闭原则(OCP)
- 里氏代换原则(LSP)
- 接口分离原则(ISP)
- 依赖反转原则(DIP)
对象建模并不容易,而且也不是精确科学。原则的存在大多数情况下告诉你做事的方式.一一给予指导,可能为你指明正确的方向。建模的整个要点是找到正确的原则组合。它们之中的一些甚至可能是冲突的。某些SOLID原则(特别是SRP和OCP)可能真的很难在大型代码库里全面实施。它们可能会引导你持续重构,直到你发现超过某个临界值之后工作继续量增加而好处却开始减少为止。盲目实施原则(特别是和OCP)可能会使你不能集中于主要目标,即产生可工作可维护的代码。
单一责任原则
一个类有且只有一个改变理由。
这里的重点本质上不是简化,而是通过暴露数量非常有限的责任使这个类与系统的交集更小,这样一来,当需求
改变时,需要编辑这个类的可能性就会更小了。
SRP经常被盲目地用于衡量代码的质量。在极端情况下,你会面临产生很多贫血类(只有属性
和少量甚至没有行为)的严重风险。每个类都倾向于承担最小量的责任,但你仍需要一些地方放置
系统所需的所有编排逻辑。因此出来的模型可能没有那么理想。
这就是为什么我们把SRP称为向量,在写代码时,记住类应该尽可能简单,专注于一个主要的
核心任务。但那不应该变成宗教教义或者衡量性能和质量的方式。
开放/封闭原则
开放/封闭原则使开发者可以创建能从改变幸存下来的软件实体(不管是类、模块还是函数)。这个原则认为:
模块应该对扩展开放,但对修改封闭。
对扩展开放基本上意味着现有的类应该是可扩展的,可以用作构建其他相关功能的基础。但在实现其他相关功能时,你不应该修改现有代码,因而对修改封闭。
OCP鼓励使用组合、接口和泛型等编程机制生成在不修改源代码的情况下可以扩展的类。
比如说,如果你创建一个类,使用泛型日志记录接口记录这个类的活动,这个类就能使用任何实现这个接口的日志记录器了。如果你使用组合,你可以在不触及现有组件的情况下在它们之上构建新的功能。
里民代换原则
子类应该可以替换它们的基类。
每当使用继承时,需要注意里民代换原则。继承是一个棘手的东西,组合肯定是使用类的一种更