05 重構 重新組織資料

2021-10-07 13:14:03 字數 1969 閱讀 8361

一 self encapsulate field (自封裝字段)

直接訪問乙個字段,與該字段之間的耦合關係將會逐漸變得笨拙。為該字段建立取值、設值函式,並且只以這些函式來訪問字段

二 replace data value with object (以物件取代資料值)

有乙個資料項,需要與其他資料和行為一起使用才有意義。將資料變成物件

三 change value to reference (將值物件改為引用物件)

從乙個類衍生出許多彼此相等的例項,希望將它們替換為同乙個物件。將這個值物件變成引用物件

四 change reference to value (將引用物件改為值物件)

有乙個引用物件,很小且不可變,而且不易管理。將它變成乙個值物件

五 replace array with object (以物件取代陣列)

有乙個陣列,其中的元素各自代表不同的東西,以物件替換陣列。對於陣列中的每個元素,以乙個欄位來表示

六 duplicate observed data (複製」被監視資料「)

有一些領域資料置於gui控制項中,領域函式需要訪問這些資料。將該資料複製到乙個領域物件中,建立乙個 observer 模式,用以同步領域物件和gui物件內的重複資料

七 change unidirectional association to bidirectional (將單向關聯改為雙向關聯)

兩個類都需要使用對方特性,但是其中只有一條單向連線。新增乙個反向指標,並使修改函式能夠同時更新兩條連線

八 change bidirectional association to unidirectional (將雙向關聯改為單向關聯)

兩個類之間有雙向關聯,但其中乙個類如今不再需要另乙個類的特性。去掉不必要的關聯

九 replace magic number with symbolic constant (以字面常量取代魔法數)

有乙個字面數值,帶有特別含義。創造乙個常量,根據其意義為他命名,並將上述的字面數值替換為這個常量

十 encapsulate field (封裝字段)

類中存在乙個 public 字段。將它宣告為 private,並提供相應的訪問函式

十一 encapsulate collection (封裝集合)

有個函式返回乙個集合。讓這個函式返回該集合的乙個唯讀副本,並在這個類中提供增加、移除集合元素的函式

十二 replace type code with class (以類取代型別碼)

類之中有乙個數值型別碼,單它不影響類的行為。以乙個新的類替換該數值型別碼

十三 replace type code with subclasses (以子類取代型別碼)

有乙個不可變的型別碼,它會影響類的行為。以子類取代這個型別碼

十四 replace type code with statue/strategy (以 state/strategy取代型別碼)

有乙個型別碼,它會影響類的行為,但你無法通過繼承手法消除它。以狀態物件取代型別碼

重構 重新組織資料

1 self encapsulate field 自封裝字段 為這個字段建立取值 設定函式,且只通過這個函式訪問該欄位。2 replace data value with object 以物件取代資料值 有乙個資料項,需要與其他資料和行為一起使用才有意義。將資料項變成物件。3 change valu...

重構之重新組織資料

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

重構摘要8 重新組織資料

你直接訪問乙個字段,但與字段之間的耦合關係逐漸變得笨拙。為這個字段建立取值 設定函式,並且只以這些函式來訪問字段。子類用超類資料時 你有乙個資料項,需要與其他資料和行為一起使用才有意義 值物件應該是不可修改內容的 你從乙個類衍生出許多彼此相等的例項,希望將它們替換為同乙個物件 你有乙個引用物件,很小...