1、重復代碼
解決方案:
2、函數過長和參數列過長
修改點:
解決方案:
3、過大的類
解決方案:提煉新的獨立類或者子類
4、參數列過長
解決方案:
5、發散式變化(一個類受多種變化影響,貌似就是單一職責原則)目標:外界變化和需要修改的類一一對應
修改點:軟件一旦發生多種變化,但是都修改同一個類,說明此類職責重復
解決方案:找出某種特殊原因造成的所有變化,然後將它們提取到另一個類裡面
6、霰彈式修改(一個變化修改多個類)目標:外界變化和需要修改的類一一對應
修改點:軟件一旦發生變化,造成要修改很多類
解決方案:找出某種變化引起的不同類中的眾多修改點,將各個類中修改點放到一個類中
7、依戀情節
修改點:
當一個類的函數為了計算經常調用另一個類的一大堆的函數時就表示出現了依戀情節。
1和0的世界裡面出現了如此具有文藝氣質的詞,那麼我們就用文藝的手法去理解:你們家的女朋友經常去找別人家的漢子時,你多多少少需要知道壞了。
解決方案:
如果這段代碼完全依戀另一個類,那麼將此部分出現依戀情節的代碼提煉成函數放到另一個類裡面(這告訴我們當一個女人完全不愛你的時候要學會放手?)
然而很多時候並非這麼簡單,它兩個類都有依戀呢?(然而很多時候並非這麼簡單,她兩個都愛呢?)
那就判斷哪個類擁有最多被此函數使用的數據,然後就把此函數和那些數據擺在一起。(判斷她愛哪個的優點多一點,就讓她去找誰吧?)
難怪大家都說程序員都是好男人@_@
然而Martin大神多說了一句:
如果先提取方法將這段代碼分割成不同的數個較小的獨立函數上述步驟會簡單很多。(請恕我直言,左腿和左手我要了,刀交給你了,你隨意?)
--太可怕了,我先冷靜冷靜,明天繼續
8、數據泥團
9、基本類型偏執
10、Switch驚悚現身
11、平行繼承體系
12、冗贅類
13、誇誇其談未來性
14、令人迷惑的暫時字段
15、過度耦合的消息鏈
16、中間人
17、狎昵關系
18、異曲同工的類
19、不完美的庫類
20、純稚的數據類
21、被拒絕的遺贈
22、過多的注釋