Shotgun Surgery和Divergent Change,但恰恰相反。如果每遇到某种变化,你都必须在许多不同的classes内做出许多小修改以响应之,你所面临的坏味道就是Shotgun Surgery。如果需要修改的代码散布四处,你不但很难找到它们,也很容易忘记某个重要的修改。
这种情况下你应该使用Move Method(142)和Move Field(146)把所有需要修改的代码放进同一个class。如果眼下没有合适的class可以安置这些代码,就创造一个。通常你可以运用Inline Class(154)把一系列相关行为放进同一个class。这可能会造成少量Divergent Change,但你可以轻易处理它。
Divergent Change是指[一个class受多种变化的影响],Shotgun Surgery则是指[一种变化引发多个class相应修改]。这两种情况下你都会希望整理代码,取得[外界变化]与[待改类]呈现一对一关系的理想境地。