将系统的构造与使用分开

  1. public Service getService() {
  2. if (service == null) {
  3. service = new MyServiceImpl(...);
  4. }
  5. return service;
  6. }

延迟初始化/赋值

  1. 不分解这些依赖关系就无法编译。
  2. 测试会是个问题。
  3. 不知道MyServiceImpl在所有情形中是否都是正确的对象。

“一开始就做对系统”纯属神话。反之,我们应该只去实现今天的 用户政策 ,然后重构,明天再扩展系统、实现新的用户故事。这就是迭代和增量敏捷的精髓所在。测试驱动开发、重构以及它们打造出的整洁代码,在代码层面保证了这个过程的实现。