近期再度《重構》,有感而記:
Bad smells in Code(不好的代碼):
1.Duplicated Code(重複的代碼),同一份代碼出現在一次以上;
2.Long Method(過長代碼),一個函數太長,功能包羅永珍;
3.Large Class(過大類),一個類的功能太多,導致有很多的執行個體變數;
4.Long ParameterList(過長參數列遇到多種變化,都是在某個類中做出變化;
6.Shotgun Surgery(霰xion彈式變化),和5剛好相反,遇到某種變化,都必須在許多不同的類內做出許多變化;
7.Feature Envy(依戀情節)某個類中的某個函數提供功能依賴的資料,依賴的方法都來自另一個類
8.Data Clumps(資料泥團),好幾個資料項目總是一起出現在很多地方,可以將這幾個資料項目提煉到一個獨立的對象中;
9.Primitive Obsession(基本型別偏執),喜歡使用基本類型資料,而不用自訂類型,如:函數形參有好多個基本類型資料時,可以把這幾個基本類型資料群組合為一個自訂資料類型;
10.Switch Statement(switch語句),物件導向編程的一個最明顯的特徵就是:少用switch或case語言,從本質上說,switch語句的問題在與重複,同樣的switch語句散佈於不同地方,修改一個case,就要修改很多地方;
11.Parallel Inheritance Hierarcies(平行繼承體系):每當為某個class增加一個subclass,必須也為另一個class相應的增加一個subclass
12.Lazy Class(冗餘類);如果某個class的所得不值其身價,它就應該消失。
13.Speculative Generality(夸夸其談未來性);如果所有裝置都會被用到,那就值得那麼做;如果用不到,就不值得。用不上的裝置只會當你的路,所以,搬開他吧。
14.Temporary Field(令人迷惑的暫時範圍):某個類的某個instance變數僅為某種特定情勢而設,這樣的代碼讓人不易理解,因為通常認為對象在所有時候都需要他的所有變數;
15.Message Chains(過度耦合的訊息鏈);使用者想一個對象索求另一個對象,然後再向後者索求另一個對象,然後再索求另一對象……;
16.Middle Man(中間轉手人),對象的基本特徵之一就是封裝,封裝往往伴隨委託,如果某個class介面有很多的函數都委託其他class,這樣就是過度運用;
17.Inappropriate Intimacy(過度親密),類與類之間過度親密;
18.Alternative Classer with Different Interfaces(異曲同工的類),如果兩個函數做同一件事,卻有著不同的簽名式;
19.Incomplete Library Class(不完美的程式庫類)
20.Data Class(純資料類)
21.Refused Bequest(被拒絕的遺贈),子類不想或不需要父類的函數或資料
22.Comments(過多的注釋)
這些需要重構的情況,佔據了多少?
汗……,可能是因為項目時間緊,很多地方都沒有注意到