1. 大function 行數過多的function。 2. 大class function、屬性過多的class。 3. Primitive Obsession (原始型態癡迷) 使用最基本的int, string,去取代應該要創的類。(如: Money class, Address class)。 USER_ADMIN_ROLE = 1,這種常數,應該使用一個class,去列舉他所有的可能性。 4. 長參數 一個function有過多的參數。 5. 資料泥團 很多class裡面都出現一樣的資料群,如數據庫連線,應該要提出來。 6. 複雜的switch跟if 應該使用別的方法處理,例如多態。 7. 暫存欄位(class) class裡有很多暫存欄位,用來存某個function的結果,而不是在那個funciton內產生,這種暫存欄位多數時間是無用的。 8. Refused Bequest 僅僅只為了重用代碼而繼承,不考慮物件繼承的意義,繼承的意義為is a,可用委託模式(Delegation)。 9. Alternative Classes with Different Interfaces 指有完全相同的功能,但有不同的inferface和名稱出現在系統裡。 10. 發散的變化 (Divergent Change) 指有一個類有許多被更改的原因,違反srp原則。 11. 霰彈槍手術 (Shotgun surgery) 只重複的程式碼在多個類反覆出現,要修改時需要一個一個找出來。 12. 平行繼承結構 為一個繼承架構創一個子類,發現另一個繼承架構也要新增一個子類。 13. 過多註解 14. 重複的code 15. 不必要的類 16. Data Class 指那種只有getter setter的class,原因是因為屬性修改後,所有用到這個物件的地方都有可能會修改。 17. Dead Code 不再用的任何程式碼(過時)。 18. Speculative Generality 沒有用到的程式碼(為了以防萬一)。 19. Feature Envy function訪問另一個對象的數據比訪問其自身的數據更多。 20. Inappropriate Intimacy 兩個類別過度使用資料和function,職責拆分有問題。 21. Message Chains 出現 $a