重構-重新組織數據


1、Self Encapsulate Field(自封裝字段)
  爲這個字段建立取值/設置函數,且只通過這個函數訪問該字段。

2、Replace Data Value with Object(以對象取代數據值)
  有一個數據項,需要與其他數據和行爲一起使用纔有意義。將數據項變成對象。

3 Change Value to Reference(將值對象改爲引用對象)
   你從一個類衍生出許多彼此相等的示例,希望將它們替換爲同一個對象。將這個值對象改爲引用對象。

4、Change Reference to Value (將引用對象改爲值對象)
  你有一個引用對象,很小且不可變,而且不易管理。將它變成一個值對象。
“不可變”指的是引用關係可以變,可以用一個新的對象取代舊的對象,但引用的對象自身不能變。

5、Replace Array with Object (以對象取代數組)
  有一個數組,其中的元素各自代表不同的東西。以對象替換數組,對於數組中的每個元素,以一個字段來表示。

7*、Change Unidirectional Association To Bidirectional(將單向關聯改爲雙向關聯)
  添加一個反向指針,並使修改函數能夠同時更新兩條連接。

8*、Change Bidirectional Association To Unidirectional(將雙向關聯改爲單向關聯)
  

9、Replace Magic Number with Symbolic Constant(以字面常量取代魔法數)
  創造一個常量,根據其意義爲它命名,並將上述的字面數值替換爲這個常量。在本項重構前,應該先尋找其他替換方案。

10、Encapsulate Field(封裝字段)
  你的類中存在一個public字段。將它聲明爲private,並提供相應的訪問函數。

11、Encapsulate Collection(封裝集合)
  有個函數返回一個集合。讓這個函數返回集合的一個只讀副本,並在這個類中提供添加/移除集合元素的函數。

12、Replace Record with Data Class(以數據類取代記錄)
  爲該記錄創建一個“啞”數據對象。

13、Replace Type Code with Class(以類取代類型碼)
  類之中有一個數值類型碼,但它不影響類的行爲。以一個新的類替換該數值類型碼。在使用此項重構之前,你應該先考慮類型碼的其他替換方式。只有當類型碼是純粹數據時(也就是類型碼不會在switcha語句中引起行爲的變化),你才能以類來替代它。

14~、Replace Type Code with Subclasses(以子類取代類型碼)
  你有一個不可變的類型碼,它會影響類的行爲。以子類取代這個類型碼。一般來說,這種情況就是switch這樣的條件表達式。有兩種情況不能使用這種重構方式:(1)類型碼在對象創建後發生了變化;(2)由於某種原因,類型碼宿主類已經有了子類。

15~、Replace Type Code with State/Staregy(以State/strategy取代類型碼)
  

16、Replace Subclass with Fields(以字段取代子類)
  你的各個子類的唯一差別只在“返回常量數據”的函數身上。修改這些函數,使它們返回超類中的某個(新增)字段,然後銷燬子類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章