霰弹式修改 (Shotgun Surgery)
ID: shotgun_surgery | 严重程度: 中 (默认)
当需求的一个变化迫使您在许多不同的模块中进行许多小的更改时,就会发生霰弹式修改。archlint 通过分析 git 历史记录来检测频繁一起更改的文件(高共变频率)。
为什么这是一种坏味道
- 高维护成本:每个功能或错误修复都需要触及系统的多个部分。
- 容易出错:很容易遗漏许多必需更改中的一个,导致错误。
- 封装不佳:这表明单一职责在代码库中被分散,而不是封装在一个地方。
如何修复
- 整合职责:使用 Move Method 或 Move Field 将相关逻辑合并到一个模块中。
- 引入参数对象 (Introduce Parameter Object):如果多个模块需要相同的数据集,将其分组为单个对象。
- 用对象替换数据值 (Replace Data Value with Object):如果许多模块处理相同的原始数据,将该数据及其行为封装到一个新类中。
配置
yaml
rules:
shotgun_surgery:
severity: medium