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相應修改]。這兩種情況下你都會希望整理代碼,取得[外界變化]與[待改類]呈現一對一關系的理想境地。