Duplicated Code(重復(fù)代碼)
常見問題
- 同一個(gè)類的兩個(gè)函數(shù)含有相同的表達(dá)式
- 兩個(gè)互為兄弟的子類內(nèi)含相同的表達(dá)式
- 兩個(gè)毫不相關(guān)的類有相同或相似的代碼
常用的重構(gòu)方法:
- Extract Method 提煉方法
- Pull Up Method 字段上移
- Extract Class 提煉類
Long Method (過長函數(shù))
常見問題
- 在開發(fā)維護(hù)過程中,函數(shù)越來越長,邏輯越來越復(fù)雜,難以理解
常用的重構(gòu)方法:
- Extract Method 提煉方法
- Decompose Conditional 分解表達(dá)式
注:函數(shù)并不是越短越好,一個(gè)函數(shù)盡量只完成一個(gè)功能。
Large Class(過大的類)
常見問題
- 單個(gè)類功能太多
- 有大量的實(shí)例變量,和重復(fù)代碼
常用的重構(gòu)方法:
- Extract Class 提煉類
- Extract Subclass 提煉子類
- Extract Interface 提煉接口
Long Parameter List (過長參數(shù)列表)
常見問題
- 函數(shù)功能越來越大
- 不停添加各種特殊操作
常用的重構(gòu)方法:
- Replace Parameter With Method 以函數(shù)對(duì)象取代函數(shù)
- Preserve Whole Object 保持對(duì)象完整
- Introduce Parameter Object 引入?yún)?shù)對(duì)象
DivergentChange (發(fā)散式變化)
常見問題
- 某個(gè)類因?yàn)椴煌蛟诓煌较蛏习l(fā)生變化,如修改某個(gè)功能,需要同時(shí)修改某幾個(gè)函數(shù)
常用重構(gòu)方法
- Extract Class 提煉類
Shotgun Surgery (散彈式修改)
常見問題
- 一種變化引起多個(gè)類修改
常用重構(gòu)方法
- Move Method 移動(dòng)方法
- Move Field 移動(dòng)字段
- Inline Class 內(nèi)部類
Feature Envy (依戀情結(jié))
常見問題
- 類函數(shù)對(duì)某個(gè)類的以來程度遠(yuǎn)大于當(dāng)前類
常用重構(gòu)方法
- Extract Method 提煉方法
- Move Method 移動(dòng)方法
Data Clumps(數(shù)據(jù)泥團(tuán))
常見問題
- 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)混亂,多個(gè)類中的某些字段總是同時(shí)出現(xiàn)
常用重構(gòu)方法
- Extract Class 提煉類
- Preserve Whole Object 保持對(duì)象完整
- Introduce Parameter Object 引入?yún)?shù)對(duì)象
Primitive Obsession(基本類型偏執(zhí))
常見問題
- 大量使用基本類型
- 未對(duì)數(shù)據(jù)進(jìn)行有效的抽象
- 未對(duì)總是同時(shí)出現(xiàn)的字段封裝
常用重構(gòu)方法
- Replace Type Code with Class
- Extract Class
Switch Statements
常見問題
- 面向?qū)ο蟪绦驊?yīng)該少用Switch(或Case)
- Switch散布在多個(gè)地方,修改會(huì)影響多個(gè)類
常用重構(gòu)方法
- Replace Conditional with Polymorphism
- Replace Parameter with Explicit Methods
Parallel Inheritance Hierarchies(平行繼承體系)
常見問題
- 為某個(gè)類添加子類時(shí),必須為另一個(gè)類相應(yīng)的增加一個(gè)子類
常用重構(gòu)方法
- Move Method
- Move Field
Lazy Class(冗贅類)
常見問題
- 類和函數(shù)含有冗余操作
常用重構(gòu)方法
- Collapse Hierarchy
- Inline Class
Speculative Generality(夸夸其談未來性)
常見問題
- 過分強(qiáng)調(diào)擴(kuò)展性,使用代碼難以理解
- 添加許多多余的參數(shù)
常用重構(gòu)方法
- Collapse Hierarchy
- Remove Parameter
Temporary Field (令人迷惑的臨時(shí)字段)
常見問題
- 類中某些字段,只有在及其特殊的條件下才會(huì)使用
常用重構(gòu)方法
- Extract Class
Message Chains(過度耦合的消息鏈)
常見問題
- 多個(gè)類之間依賴大,a.x().y().z()....
- 產(chǎn)生多個(gè)臨時(shí)變量
常用重構(gòu)方法
- Hide Delegate
Middle Man
常見問題
- 過度使用委托,某個(gè)類的大部分功能都在委托給其他類
常用重構(gòu)方法
- Remove Middle Man
- Inline Method
- Replace Delegation With Inheritance
Inappropriate Intimacy (狎昵關(guān)系)
常見問題
- 兩個(gè)類互相依賴度極高,類的內(nèi)部實(shí)現(xiàn)影響彼此
常用重構(gòu)方法
- Move Method
- Move Field
- Replace Inheritance Delegation
Alternative Class with Different Interfaces(異曲同工類)
常見問題
- 兩個(gè)類 、函數(shù)做著實(shí)現(xiàn)相同的功能
常用重構(gòu)方法
- Extract Superclass
- Move Method
Incomplete Library Class(不完美的庫類)
常見問題
- 引用的庫設(shè)計(jì)不完善
- 有許多特殊操作
常用重構(gòu)方法
- Introduce Foreign Method
- Introduce Local Extensions
Data Class (純稚數(shù)據(jù)類)
常見問題
- 只包含數(shù)據(jù)和getter setter
- 內(nèi)部字段的 處理分散在各個(gè)類中
常用重構(gòu)方法
- Encapsulate Field
- Encapsulate Collection
- Remove Setting Method
Refused Bequest(被拒絕的饋贈(zèng))
常見問題
- 子類繼承過多不需要功能
常用重構(gòu)方法
- Push Down Method
- Push Down Field
Comments(過多的注釋)
當(dāng)你感覺需要撰寫注釋時(shí),請(qǐng)先嘗試重構(gòu),試著讓所有注釋變得多余