系统1.将系统的构造与使用分开
- 将全部构造过程搬迁到main或者被称之为main的模块中,涉及系统其余部分时,假设所有对象都已经正确构造。
- 有时应用程序也需要负责确定何时创建对象,我们可以使用抽象工厂模式让应用自行控制何时创建对象,但构造能力在工厂实现类里,与使用部分分开。
- 依赖注入(DI),控制反转(IoC)是分离构造与使用的强大机制。
emergent design
四条规矩帮助你创建优良的设计
1.运行所有测试
- 紧耦合的代码难以编写测试,测试写的越多,就越会遵循依赖注入之类的规则,使代码加减少耦合。
- 测试消除了对清理代码就会破坏代码的恐惧。
2.消除重复
- 两个方法提取共性到新方法中,新方法分解到另外的类里,从而提升其可见性。
- 模板方法模式是消除重复的通用技巧// 原始逻辑 public class VacationPolicy { public void accrueUSDivisionVacation { //do x; //do US y; //do z; } public void accrueEUDivisionVacation { //do x; //do EU y; //do z; } } // 模板方法模式重构之后 abstract public class VacationPolicy { public void accrueVacation { x; y; z; } private void x { //do x; } abstract protected void y { } private void z { //do z; } } public class USVacationPolicy extends VacationPolicy { protected void y { //do US y; } } public class EUVacationPolicy extends VacationPolicy { protected void y { //do EU y; } }
3.表达意图
- 作者把代码写的越清晰,其他人理解代码就越快。
- 太多时候我们深入于要解决的问题中,写出能工作的代码之后,就转移到下一个问题上,没有下足功夫调整代码让后来者易于阅读。多少尊重一下我们的手艺,花一点点时间在每个函数和类上。
4.尽可能少的类和方法
- 为了保持类和函数的短小,我们可能会早出太多细小的类和方法。
- 类和方法数量太多,有时是由毫无意义的教条主义导致的。
5.以上4条规则优先级依次递减。重要的是测试、消除重复、表达意图。 并发编程 1.防御并发代码问题的原则与技巧
- 遵循单一职责原则。分离并发代码与非并发代码
- 限制临界区数量、限制对共享数据的访问。
- 避免使用共享数据,使用对象的副本。
- 线程尽可能地独立,不与其他线程共享数据