重构全面总结
《重構(gòu)》為我們帶來了一種改進(jìn)代碼的高效過程,從而徹底改變了面向?qū)ο笤O(shè)計(jì)的方式:?
? ? ?1)改進(jìn)軟件設(shè)計(jì)(整理代碼)
? ? ?2)提高代碼質(zhì)量和可讀性,使軟件系統(tǒng)更易理解和維護(hù)
? ? ?3)幫助盡早的發(fā)現(xiàn)錯(cuò)誤
? ? ?4)提高編程速度
? ? ?改善設(shè)計(jì)、提高可讀性、減少缺陷都是為了穩(wěn)住陣腳。良好的設(shè)計(jì)是成功的一半,停下來通過重構(gòu)改進(jìn)設(shè)計(jì),或許會(huì)在當(dāng)前減緩速度,但它帶來的后發(fā)優(yōu)勢(shì)卻是不可低估的。
1. ??編寫代碼22宗罪
1. ?Duplicated ?Code重復(fù)代碼2. ?Long Method 過長(zhǎng)函數(shù)
3. ?Large Class 過大的類?
4. ?Long Parameter List 過長(zhǎng)參數(shù)列 ?
5. ?Divergent Change 發(fā)散式變化(相對(duì)聚焦式)
6. ?Shotgun Surgery 霰彈式修改?
7. ?Feature Envy 依戀情節(jié)
8. ?Data Clumps 數(shù)據(jù)泥團(tuán) ?
9. ?Primitive Obsession 基本類型偏執(zhí)
10. Switch Statement (switch 驚悚現(xiàn)身)
11. Parallel Inheritance Hierarchies 平衡繼承體系
12. Lazy Class(冗贅類)
13. Speculative Generality(夸夸其談未來性)
14. Temporary Field(令人迷惑的暫時(shí)值域)
16. Middle Man(中間轉(zhuǎn)手人)
17. Inappropriate Intimacy(狎昵關(guān)系)?
18. Alternative Classes with Different Interfaces(異曲同工的類)?
19. Incomplete Library Class(不完善的庫(kù)類) ? ? ??
20. Local Extension (引入本地?cái)U(kuò)展) 。
21. Data Class(純稚的數(shù)據(jù)類)
22. Refused Bequest(被拒絕的遺贈(zèng))
2. ?重新組織函數(shù)的九種方法
1. ?Extract Method 提煉函數(shù)2. ?Inline Method 內(nèi)聯(lián)函數(shù)
3. ?Inline Temp 內(nèi)聯(lián)臨時(shí)變量
4. ?Replace Temp with Query 以查詢代替臨時(shí)變量
5. ?Introduce Explaining Variable 引入解釋性變量
6. ?Split Temporary Variable 分解臨時(shí)變量
7. ?Remove Assigments to Parameters 移除對(duì)參數(shù)的賦值
8. ?Replace Method with Method object 函數(shù)對(duì)象取代函數(shù)
9. ?Substitute Algorithm 替換算法
3. ?對(duì)象之間移動(dòng)特性的八種方法
1. ?Move Method 移動(dòng)函數(shù)2. ?Move Field 搬移字段
3. ?Extract Class提煉類
4. ?Inline Class 將類內(nèi)聯(lián)化
5. ?Hide Delegate 隱藏委托關(guān)系
6. ?Remove middle Man 移除中間人
7. ?Introduce Foreign Method 引入外加函數(shù)
8. ?Introduce Local Extension 引入本地?cái)U(kuò)展
4. ?重新組織數(shù)據(jù)的16種方法
1. ?Self Encapsulate Field 自封裝字段2. ?Replace Data Value with Object 對(duì)象取代數(shù)據(jù)值
3. ?Change value to Reference 將值對(duì)象改為引用對(duì)象
4. ?Change Reference to Value 將引用對(duì)象改為值對(duì)象
5. ?Replace Array with Object 以對(duì)象取代數(shù)組
6. ?Duplicate Observed data 復(fù)制被監(jiān)視數(shù)據(jù)
7. ?Change Unidirection Association to Bidirectional 將單向關(guān)聯(lián)改為雙向關(guān)聯(lián)
8. ?Change Bidirectional ?Association to Unidirection將雙向關(guān)聯(lián)改為單向關(guān)聯(lián)
9. ?Replace Magic Number with Symbolic Constant字面常量取代魔法數(shù)
10. Encapsulate Field 封裝字段
11. Encapsulate Coolection 封裝集合
12. Replace Record with Data Class 以數(shù)據(jù)類取代記錄
13. Replace Type Code with Class 以類來取代類型碼
14. Replace Type Code with Subclasses 以子類來取代類型碼
15. Replace Type Code with State/Strategy 以狀態(tài)/策略取代類型碼
16. Replace Subclass with Fieldls 以字段取代子類
5. ?簡(jiǎn)化條件表達(dá)式
1. ?Decompose Conditional 分解條件表達(dá)式
2. ?Consolidate Conditional Expression 合并條件表達(dá)式
3. ?Consolodate Duplicate Conditional Fragments 合并重復(fù)的條件片段
4. ?Remove Control Flag 移除控制標(biāo)記
5. ?Replace Nested Conditional with Guard Clauses 以衛(wèi)語句取代嵌套條件表達(dá)式
6. ?Replace Conditional with Polymorphism 以多態(tài)取代條件表達(dá)式
7. ?Introduce Null Object 引入Null對(duì)象
8. ?Introduce Assertion 引入斷言
6. ?簡(jiǎn)化函數(shù)調(diào)用
1. ?Rename Method 函數(shù)改名2. ?Add Parameter 添加參數(shù)
3. ?Remove Parameter 移除參數(shù)
4. ?Separate Query from Modifier 將查詢函數(shù)和修改函數(shù)分離
5. ?Parameterize Method 令函數(shù)攜帶參數(shù)
6. ?Replace Parameter with Explicit Methods 以明確函數(shù)取代參數(shù)
7. ?Preserve whole object 保持對(duì)象完整
8. ?Replace Parameter with Methods 以函數(shù)取代參數(shù)
9. ?Introduce Parameter Object 引入?yún)?shù)對(duì)象
10. ?Remove setting Method 移除設(shè)置函數(shù)
11. ?Hide Method 隱藏函數(shù)
12. ?Replace Constructor with Factory Method 以工廠函數(shù)取代構(gòu)造函數(shù)
13. ?Encapsulate Downcast 封裝向下轉(zhuǎn)型
14. ?Replace Error Code with Exception 以異常取代錯(cuò)誤碼
15. ?Replace Exception with Test 以測(cè)試取代異常
7. ?處理概括關(guān)系
1. ?Pull Up Field 字段上移2. ?Pull up Method 函數(shù)上移
3. ?Pull up Constructor Body 構(gòu)造函數(shù)本體上移
4. ?Push down Method 函數(shù)下移
5. ?Push down Fiedld 字段下移
6. ?Extract Subclass 提煉子類
7. ?Extract Superclass 提煉超類
8. ?Extract Interface 提煉接口
9. ? Collapse Hierarchy 折疊繼承體系
10. ?From TemPlate Method 塑造模板函數(shù)
11. ?Replace Inheritance with delegation 以委托取代繼承
12. ? Replace delegation with Inheritance 以繼承代替委托
8. ?大型重構(gòu)
1. ?Tease apart Inheritance 梳理并分解繼承體系2. ?Convert Procedural design to Objects 將過程化設(shè)計(jì)轉(zhuǎn)化為對(duì)象設(shè)計(jì)
3. ?Separate Domain from from Presention 將領(lǐng)域和表述/顯示分離
4. ?Extract Hierarchy 提煉繼承體系
總結(jié)
- 上一篇: 六款小巧的HTTP Server
- 下一篇: 重构-改善既有代码的设计:处理概括关系