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

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

    1 符号和症状

    任何修改,都要求对很多不同的类做很多小的修改。
    12 代码坏味之妨碍修改-2:散弹式手术 - 图1

    2 病因

    单个职责被划分到大量类中。过分使用分散式修改后可能出现这种情况。
    12 代码坏味之妨碍修改-2:散弹式手术 - 图2

    3 治疗

  • 移动方法移动字段:将已有的类行为移动到单个类中。如果没有合适的移动目标类,则创建一个新类。

  • 如果移动之后,原来的类几乎空,尝试通过内联类来摆脱这些冗余的类。

12 代码坏味之妨碍修改-2:散弹式手术 - 图3

4 疗效

  • 更好的代码组织
  • 更少代码重复
  • 更容易维护