《重構》--- 代碼的壞味道
01-28
Duplicated Code(重複的代碼)
- 設法將它們合而為一,程序會變得更好。
Long Method(過長函數)
- 需要以注釋來說明點什麼的時候,就把需要說明的東西寫進一個獨立函數中,並以其用途(而非實現手法)命名。可以對一組或甚至一行代碼做這件事。哪怕替換後的函數調用動作比函數自身還長,只要函數名稱能夠解釋其用途就可以。關鍵不在於函數的長度,而在於函數「做什麼」和「如何做」之間的語義距離。
Large Class(過大類)
Long Parameter List(過長參數列)
Divergent Change(發散式變化)
- 一個 class 受多種變化的影響是壞味道
Shotgun Surgery(散彈式修改)
- 一個變化引發多個 class 的變化是壞味道
Feature Envy(依戀情結)
- 一個類里的某個函數所有使用的數據和邏輯絕大部分來源其他類,需要對這個函數進
Data Clumps(數據泥團)
- 總是出現在一起的數據應該有屬於他們自己的對象
Primitive Obsession(基本型別偏執)
- 使用小對象替換基本類型
Switch Statements(switch驚悚現身)
- 減少使用 switch 使用統一的結構進行替代,多態取代條件表達式
Parallel Inheritance Hierarchies(平行繼承體系)
- 每當你為某個 class 增加一個 subclass,必須也為另一個class相應增加一個subclass 是壞味道
Lazy Class(冗贅類)
Speculative Generality(夸夸其談未來性)
- 不要為未來考慮太多
Temporary Field(令人迷惑的暫時值域)
- instance 的變數僅為某種特定情勢而設,需要為這些和這個臨時變數相關的代碼放到一個新的地方
Message Chains(過度耦合的消息鏈)
Middle Man(中間轉手人)
- 某個class介面有一半的函數都委託給其他class 是壞味道
Inappropriate Intimacy(狎昵關係)
- 兩個 class 聯繫過於緊密,可以將他們拆散,或者提取共有部分放到新的 class
Alternative Classes with Different Interfaces(異曲同工的類)
Incomplete Library Class(不完美的程序庫類)
- 復用可能導致過去設計
Data Class(純數據類)
- 只擁有一些值域(fields),以及用於訪問(讀寫〕這些值域的函數是壞味道
Refused Bequest(被拒絕的遺贈)
- Subclasses 應該繼承superclasses的函數和數據
Comments(過多的注釋)
- 當你感覺需要撰寫注釋,請先嘗試重構,試著讓所有注釋都變得多餘
推薦閱讀:
※《Modern Operating Systems 》--- processes and threads
※天降正義,午時已到!白銀連環殺人案告破。
※科學戀愛之男追女的正確姿勢
TAG:杂谈 |