Bloaters (程式碼已經成長得過於龐大,大於能夠妥善掌握發揮的幅度)
1. Long Function (過長函式)
2. Large Class (過大類別)
3. Long Parameter List (過長參數列)
4. Data Clumps (資料泥團)
2 個 classes 內有相同欄位、相同參數
5. Primitive Obsession (基本型別偏執)
沒有將基本型別轉化成小物件,小物件如,Date class
Tool Abusers (濫用物件導向設計,也就是說沒有完全發揮物件導向設計的特性)
6. Repeated Switch (重複的切換邏輯)
同樣的 switch 述句散佈於不同地點,添加一個新的 case 子句,必須找到所有 switch 述句並修改它們
7. Temporary Field (令人迷感的暫時欄位)
某個 instance 變數僅為某個特定情勢而設
8. Alternative Classes with Different Interfaces (異曲同工的類別)
兩個函式做同一件事,卻有著不同的署名式
9. Refused Bequest (被拒絕的遣贈)
只繼承父類別某個抽象類別
Change Preventers (小部分的修訂會連動到大範圍的修訂)
10. Divergent Change (發散式修改)
相同 class 一旦新增 A 功能要改 3 個函式,一旦新增 B 功能要改 4 個函式
11. Shotgun Surgery (霰彈式修改)
如果每遇到新增功能,需要修改散佈四處的 classes 程式碼
12. Parallel Inheritance Hierarchies (平行繼承體系)
某個 class 增加 subclass,另一個 class 也相同必須增加 subclass
Dispensables (程式碼中多餘的部分,應該要被移出 source code)
13. Duplicate Code (重複的程式碼)
14. Lazy Class (冗員類別)
15. Speculative Generality (夸夸其談未來性)
預留了太多未來可能會用到的擴充點
16. Data Class (純稚的資料類別)
沒有將資料欄位封裝起來
17. Dead Code (無作用的程式碼)
The Couplers (Couplers 說明程式碼之間存在強烈相依性、高度的耦合情形)
18. Feature Envy (依戀情結)
某個 class 常呼叫其它 class 的函式
19. Message Chains (過度耦合的訊息鏈)
當用戶向一個物件索求 (request) 另一個物件,然後再向後者索求另一個物件…
20. Middle Man (中間轉手人)
某個 class 介面有一半的函式都委託給其他 class,這樣就是過度運用
21. Inappropriate Intimacy (狎暱關係)
兩個 classes 過於親密,花費太多時間去探究彼此的資料
其它 7 個 code smells
22. Comments (過多的註釋)
23. Global Data (全域資料)
24. Mutable Data (可變資料)
25. Mysterious Name (神秘的名稱)
26. Incomplete Library Class (不完美程式庫類別)
27. Loop (迴圈)
first-class function
28. Insider Trading (內幕交易)
模組間過度交換資料會導致更多耦合
No comments:
Post a Comment