首页/开发/代码质量与评审速查/坏味道:霰弹式修改(Shotgun Surgery)
重构手法62 条

坏味道:霰弹式修改(Shotgun Surgery)

一个变化需要同时改很多处(分散在各处的相似修改)时,用 Move Function、Move Field、Inline Class 把相关代码聚拢;目标是单一修改点。

信号改一个字段要动十几个文件
手法Move Function、Move Field、Combine Functions into Class
反向对照发散式变化(Divergent Change):一个类因多种原因被改

聚拢思路

聚拢思路
// 分散:多处各自计算有效期
// 聚拢:一个模块负责「有效期」概念
class Validity {
    boolean isValid(Instant now) { ... }
}

易错点

  • 把散落逻辑集中时改变行为细节:集中前后必须逐一对照
  • 只移动到新类不调用:新旧两份逻辑并存,更混乱

数据来源与参考

  • 《重构》第 2 版 · 第 3 章(Shotgun Surgery / Divergent Change)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌