12.1 通过迭进设计达到整洁目的
只要遵循以下规则,设计就能变得“简单”:
- 运行所有测试
- 不可重复
- 表达了程序员的意图
- 尽可能减少类和方法的数量
以上规则按其重要程度排列。
12.2 简单设计规则1:运行所有测试
设计必须制造出如预期一般工作的系统,这是首要因素。
全面测试并持续通过所有测试的系统,就是可测试的系统。
只要系统可测试,就会保持类短小且目的单一的设计方案。
紧耦合的代码难以编写测试。
遵循有关编写测试并持续运行测试的简单、明确的规则,系统就会更贴近面向对象低耦合度、高内聚度的目标。编写测试将会引致更好的设计。
12.3 简单设计规则2~4:重构
有了测试,就能保持代码和类的整洁,方法就是递增式地重构代码。测试消除了对清理代码就会破坏代码的恐惧。
在重构过程中,可以应用有关优秀软件设计的一切知识,提升内聚性,降低耦合度,切分关注面,模块化系统性关注面,缩小函数和类的尺寸,选用更好的名称。
12.4 不可重复
重复是拥有良好设计的系统的大敌。它代表着额外的工作、额外的风险和额外且不必要的复杂度。
要想创建整洁的系统,需要有消除重复的意愿,即便对于短短几行也是如此。
模板方法模式是一种移除高层级重复的通用技巧。
12.5 表达力
软件项目的主要成本在于长期的维护。代码应当清晰地表达其作者的意图。作者把代码写得越清晰,其他人花在理解代码上的时间也就越少,从而减少缺陷,缩减维护成本。
可以通过选用好名称来表达。
也可以通过保持函数和类尺寸短小来表达。
还可以通过采用标准命名法来表达。
编写良好的单元测试也具有表达力。
不过,做到有表达力的最重要方式却是尝试。
12.6 尽可能少的类和方法
我们的目标是在保持函数和类短小的同时,保持整个系统短小精悍。
尽管使类和函数的数量尽量少是很重要的,但更重要的却是测试、消除重复和表达力。