Shotgun Surgery和Divergent Change,但恰恰相反。如果每遇到某種變化,你都必須在許多不同的classes內(nèi)做出許多小修改以響應(yīng)之,你所面臨的壞味道就是Shotgun Surgery。如果需要修改的代碼散布四處,你不但很難找到它們,也很容易忘記某個(gè)重要的修改。
這種情況下你應(yīng)該使用Move Method(142)和Move Field(146)把所有需要修改的代碼放進(jìn)同一個(gè)class。如果眼下沒(méi)有合適的class可以安置這些代碼,就創(chuàng)造一個(gè)。通常你可以運(yùn)用Inline Class(154)把一系列相關(guān)行為放進(jìn)同一個(gè)class。這可能會(huì)造成少量Divergent Change,但你可以輕易處理它。
Divergent Change是指[一個(gè)class受多種變化的影響],Shotgun Surgery則是指[一種變化引發(fā)多個(gè)class相應(yīng)修改]。這兩種情況下你都會(huì)希望整理代碼,取得[外界變化]與[待改類(lèi)]呈現(xiàn)一對(duì)一關(guān)系的理想境地。