看《重構-設計模式》第三章 代碼的壞味道

沒有特別精確的衡量標準,只能有類似的跡象

重複代碼:

同一個類的兩個函數含有相同的表達式。

兩個互爲兄弟的子類內含有相同的表達式。

過長函數:找到能提取爲子函數的方法之一是找到註釋

過大的類:分割爲子類,可以先根據調用該類的接口進行分割

過長參數列:通過對象來傳遞一些參數

發散式變化:某個類因爲不同的原因在不同的方向上發生變化,這時候可能需要分割該類了

散彈式變化:遇到變化要在不同類中修改時,把需要修改的代碼放在一個類中

依戀情結:將一些經常使用數據的函數放在和數據一個類中,判斷原則是將總是一起變化的東西放在一塊

數據泥團:將相同的對象團提煉到一個對象上

基本類型偏執:建立小的對象來包含基本類型

switch驚悚現身:大多數可以考慮多態來替換switch

平行繼承體系:問題:當你爲一個類增加一個子類的時候,也要爲另一個類增加子類,一般策略爲讓一個繼承體系的實例引用另一個繼承體系的實例。

冗贅類:當一個類值得維護它的代價,它就應該消失。

誇誇其談未來性:如果函數或類的唯一用戶就是測試用例,這就可以把這些類或者函數刪掉了。

令人迷糊的暫時字段:類中的字段只有部分情況才使用,建議將這些字段和使用的函數重新放在一個類中

過度耦合的消息鏈:當一個用戶向一個對象請求另一個對象,再通過這個對象請求另一個對象。。。這就是消息鏈。

可以將消息鏈中任一個對象重構,但這樣會把一系列對象都變成middle man。另一更好的方法:根據消息鏈最後得到的對象是幹什麼,把使用該對象的代碼提煉爲函數,將該函數推送到消息鏈中

中間人:過度運用委託時可以將該類放進調用端

狎暱關係:兩個類過度去探究彼此的private部分,可以採用提取函數,增加獨立類來達到類的獨立

異曲同工的類:當兩個函數做着相同的事卻有不同的簽名,可以重新命名,並將一些行爲移到類中。

不完美的庫類:修改庫來完成我們需要的功能

數據類:類似數據庫表對應的對象類,只有讀取寫入其他字段的函數。

被拒絕的遺贈:當子類只使用了超類的一部分數據和函數時,傳統的做法:爲子類新建一個兄弟類,將使用不到的函數下推到哪個兄弟,這是基於“所有超類都是抽象的”。建議考慮使用繼承來複用一些行爲

過多的註釋:試着重構讓註釋都顯得多餘

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章