重構 一書要點

2021-09-01 06:57:27 字數 3863 閱讀 8974

很實用的要點,每次重構都要重新看看這些要點,真正用到平時的日常工作中。

**壞味道:

1.duplicate code 重複**

2.long method 長方法

3.large class 過大的類

4.long parameter list 過長引數列

5.divergent change 發散式變化

6.shotgun surgery 散彈式變化

7 feture envy 依戀情結

8.data clumps 資料泥團

9.primitive obsession 基本型別偏執

10.switch statument switch驚悚現身

11.parallel inheritance hierarchies 平行繼承體系

12.lazy class 冗債類

13.speculative generality 夸夸其談未來性

14.temparary field 令人迷惑的暫時字段

15.message chain 過度耦合的訊息鏈

16.middle man 中間人

18.alernative classes with different intefaces異曲同工的類

19.incomplete library class 不完美的類庫

20 data class 純稚的資料類

21.refused bequest 被拒絕的遺贈

22.comments 過多的注釋

重構手法

1.extract method 提取函式

2.inline method 內聯函式

3.inline temp 內聯臨時變數

4.replace temp with query 以查詢取代臨時變數

5.introduce explaining variable 引入解釋性臨時變數

6.splite tempary variable 分解臨時變數

7.remove assignment to parameter 移除對引數的賦值

8.replace method with method object 以函式物件取代函式

9.substitute algorithm 替換演算法

物件導向的重構

1.move method 搬移函式

2.move field 搬移字段

3.extract class 提煉類

4.inline class 內聯類

5.hide delegate 隱藏委託關係

6.remove middle man 移除中間人

7.introduce foreign method 引入外加函式

8.introduce local expression 引入本地擴充套件

資料1.self encapsulate field 自封裝字段

2.replace data value with object 以物件取代資料值

3.change value to referrence 將值物件改為引用物件

4.change referrence to value 將引用物件改為值物件

5.replace array with object 以物件代替陣列

6.duplicate observerd data 複製被監視物件

7.change unidirectional association to bidirectional 將單向關係改為雙向關係  反向指標

8.change bidirectional association to unidirectional 將雙向關係改為單向關係 

9.replace magic number with symbolic constant以字面常量取代魔法數

10.encapsulate field 封裝字段

11.encapsulate collection 封裝集合

12.replace record with data class以資料類取代記錄

13.replace type code with class以類取代型別碼

14.replace type code with subclass以子類代替型別碼

15.replace type code with status/strategy

16.replace subclass with field 以欄位取代子類

簡化條件表示式

1.decompose condiction 分解條件表示式

2.consolidate condictional expression 合併條件表示式

3.consolidate duplicate condictional fragments 合併重複的條件片段

4.remove control flag 移除控制標記

5.replace nested condictional with guard clauses 以衛語句取代巢狀條件表示式

6.replace condictional with polymorphism 以多型取代條件表示式

7.introduce null object 引入null物件

8.introduce assertion 引入斷言

簡化函式呼叫

1.rename method 函式改名

2.add parameter 增加引數

3.remove parameter 刪除引數

4.seperate query from modifier

5.parameterize method令函式攜帶引數

6.replace parameter with explicit methods 以明確函式代替引數

7.preserv whole object 保持物件完整

8.replace parameter with method以方法代替引數

9introduce parameter object 引入引數物件

10.remove setting method 刪除設值方法

11.hide method隱藏函式

12.replace constructor with factory method 以工廠函式取代建構函式

13.encapsulate downcast封裝向下轉型

14.replace error code with exception 以異常代替錯誤碼

15.replace exception with test以測試取代異常

處理概括關係(繼承關係)

1.pull up field 字段上移

2.pull up method 函式上移

3.pull up constructor body 建構函式本體上移

4.pull down method 函式下移

5.pull down field 字段下移

6.extract subclass 提煉子類

7.extract superclass 提煉超類

8.extract inte***ce 提煉介面

9.collapse hierarchy摺疊繼承體系

10.form template method 塑造模板函式

11.replace hierarchy with delegate 以委託取代繼承

12.replace delegate with inheritance 以繼承取代委託

大型重構

1.tease apart inheritance梳理並分解繼承體系

2.convert procedure design to objects 將過程化設計改為物件化設計

3.seperate domain from presentation 將領域與顯示分離

4.extract hierarchy 提煉繼承體系

一書合,萬書開

一書合,萬書開。這句話雖然說的有點誇張,但是是不折不扣的現實。有時候一本好書合上了,就會發現更多的知識需要我們去學習,有更多的書需要去讀。浪潮之巔 讓我對自身所處的行業有了新的認識,對自己的道路多了很多疑問。如何走,怎麼走?未來的發展在 作為乙個從程式設計師 拔 上來的專案經理,過去的六個月讓我懂得...

每週一書計畫

雖然現在網際網路上的知識足夠豐富,雖然搜尋引擎足夠強大,雖然我們大部分時間都被碎片化,但是在這個煩亂 急躁的世界裡如果能靜下心來讀一本書將是多麼幸福的事情啊。書籍誕生上千年,伴隨著人類的進步發展到今天 在我們離開校園走入社會之前,我們一直在圍繞著書打轉。書就在我們的基因裡,書根深於我們的思想中,我們...

每週一書計畫

雖然現在網際網路上的知識足夠豐富,雖然搜尋引擎足夠強大,雖然我們大部分時間都被碎片化,但是在這個煩亂 急躁的世界裡如果能靜下心來讀一本書將是多麼幸福的事情啊。書籍誕生上千年,伴隨著人類的進步發展到今天 在我們離開校園走入社會之前,我們一直在圍繞著書打轉。書就在我們的基因裡,書根深於我們的思想中,我們...