重構 重新組織資料

2021-08-21 09:32:35 字數 1623 閱讀 3866

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(以欄位取代子類)

你的各個子類的唯一差別只在「返回常量資料」的函式身上。修改這些函式,使它們返回超類中的某個(新增)字段,然後銷毀子類。

重構之重新組織資料

一.自封裝字段 你直接訪問乙個字段,但與字段之間的耦合關係逐漸變得笨拙。為這個字段建立取值 設值函式,並且只以這些函式來訪問字段。在字段訪問方式這個問題上,存在兩種截然不同的觀點。其中一派認為,在該變數定義所在的類中,你可以自由訪問它 另一派認為,即使在這個類中你也應該只使用訪問函式間接訪問。兩派之...

重新組織資料

將乙個值用於多個用途,就是催生混亂與bug的溫床 1.拆分變數 如果乙個變數有多個用途,就為每個用途宣告乙個變數。還有,如果要對引數改值,也先複製乙份,對副本改值,返回副本。2.字段改名 給字段取乙個準確的名字。好的命名及資料分布,能讓別人只看類的字段就理解這些類的行為。3.以查詢取代派生變數 盡量...

05 重構 重新組織資料

一 self encapsulate field 自封裝字段 直接訪問乙個字段,與該字段之間的耦合關係將會逐漸變得笨拙。為該字段建立取值 設值函式,並且只以這些函式來訪問字段。二 replace data value with object 以物件取代資料值 有乙個資料項,需要與其他資料和行為一起使...