-
通过迭进设计达到整洁目的
-
简单设计的四条规则,以下规则按其重要程序排列:
- 运行所有测试;
- 不可重复;
- 表达了程序员的意图;
- 尽可能减少类和方法的数量;
-
-
简单设计规则1:运行所有测试
- 全面测试并持续通过所有测试的系统,就是可测试的系统;
- 紧耦合的代码难以编写测试。使用依赖注入,接口,和抽象来减少耦合;
-
简单设计规则2~4:重构
-
有了测试,就能保持代码和类的整洁,方法就是递增式地重构代码;
- 测试消除了对清理代码就会破坏代码的恐惧;
- 重构的过程:提升内聚性,降低耦合度,切分关注面,模块化系统关注面,缩小函数和类的尺寸,选用更好的名称;
-
-
不可重复
- 重复有多种表现。雷同的代码行自然是重复。类似的代码往往可以调整得更相似,这样可以更容易地进行重构。
- 重复也有实现上的重复等其他一些形态
isEmpty跟踪一个布尔值,而size方法跟踪一个计数器; | 也可以通过在isEmpty中使用size方法来消除重复: return 0==size(); } |
- 小规模复用可大量降低系统复杂性。要想实现大规模复用,必须理解如何实现小规模复用;模板方法模式是一种移除高层级重复的通用技巧:
VacationPolicy下的两个方法中,有大量代码雷同; |
那一部分依据员工类型而变,可通过应用模板方法模式来消除明显的重复:
子类填充了accrueVacation算法中的"空洞",提供不重复的信息; |
-
表达力
-
写出自己理解的代码很容易,但我们也要考虑别人来理解我们的代码;
-
可以通过保持函数和类尺寸短小来表达;
- 短小的类和函数通常易于命名,易于编写,易于理解;
- 还可以通过采用标准命名法来表达;
- 编写良好的单元测试也具有表达性;
- 做到有表达力的最重要方式是尝试。我们往往在写完可以工作的代码后就转移到下一个问题上,没有下足够的时间调整代码,让后来者易于阅读。请尊重自己的手艺,花点时间,整理它们;
-
-
-
尽可能少的类和方法
- 这在四条规则里优先级最低。我们的目标是在保持函数和类短小的同时,保持整个系统短小精悍。最重要的是测试,消除重复和表达力;