发散式修改(divergent change)与散弹式手术(shotgun surgery)类似,但却是完全相反的。

  • 发散式修改:对单个类做很多修改
  • 散弹式手术:同时对多个类做同样的修改

    1 符号和症状

    修改一个类时,需要修改很多不相关的方法。比如说,添加一个新的产品类型时,必须修改产品查找、显示、排序的方法。
    11 代码坏味之妨碍修改-1:发散的修改 - 图1

    2 病因

    通常源自不良的程序结构,或者来自抄袭式编程。

    3 治疗

  • 通过抽取类来切分类的行为

  • 如果不同的类有相同的行为,可能需要通过继承组合类(抽取超类或者抽取子类

11 代码坏味之妨碍修改-1:发散的修改 - 图2

4 疗效

  • 改进代码组织
  • 减少代码重复
  • 简化支持