標籤:

《重構》--- 代碼的壞味道

  • 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:杂谈 |