你直接訪問乙個字段,但是與字段之間的耦合關係逐漸變得笨拙。
為這個字段建立取值/設值函式,並且只以這些函式來訪問字段。
間接地通過函式訪問變數的好處是:1.子類可以通過複寫函式來改變欄位的訪問路徑;2.可以提供靈活的資料管理,如延遲初始化,資料值讀取控制,資料值範圍設定控制等。
當然直接訪問欄位的好處也是顯而易見的,可以使**易於閱讀。
處理步驟:
1.為帶處理字段,建立getter和setter
2.找出該字段的所有引用點,然後修改為訪問該字段的getter或者setter函式。
3.修改該字段的訪問許可權為private
4.複查**,找出所有引用點,並修改掉
5.編譯,測試。
注:在建構函式中一般不使用設值函式。如果需要使用,可以統一的將所有的設值函式的呼叫統一放到乙個初始化函式中。
有乙個資料項,需要與其他的資料或者行為一起使用才有意義。
將資料項變成物件
當你問道duliacte code和feature envy味道的時候,你也許就需要使用這個重構手法了。
重構步驟:
1.為待替換的數值新建乙個類,並在新類中新建乙個final的字段對應該數值。然後新增乙個接受該數值為引數的建構函式。
2.將原類中該數值的型別修改為新建類。
3.修改原來該數值的取值函式,令他呼叫新型別的取值函式。
4.如果原類的建構函式中使用到該數值,那麼我們就修改該建構函式,使他呼叫新類的建構函式為該數值字段賦值。
5.編譯,測試。
6.檢視是否需要,對新類使用change value to reference。一條規則:值物件的內容是不可修改的。
注:1.如果不執行步驟6那麼我們重構後該數值字段對於的資料型別是值型別的,他的內容是不可以修改的。如果該數值字段有setter,那麼其中肯定是呼叫新類建構函式為該數值字段賦值的。
2.完成重構之後需要檢視下各個函式的名稱是否需要rename一下,比如原類中該數值的getter是否應該修改防止別人誤認為返回的是新型別的物件。
重新組織資料(一)
1,self encapsulate field 自封裝自段 現象 你直接訪問乙個字段,但與字段直接的耦合關係逐漸變得笨拙 要點 為這個字段建立取值 設定函式,並且只以這些函式來訪問字段。2,replace data value with object 以物件取代資料值 現象 你有乙個資料項,需要與...
重新組織資料
將乙個值用於多個用途,就是催生混亂與bug的溫床 1.拆分變數 如果乙個變數有多個用途,就為每個用途宣告乙個變數。還有,如果要對引數改值,也先複製乙份,對副本改值,返回副本。2.字段改名 給字段取乙個準確的名字。好的命名及資料分布,能讓別人只看類的字段就理解這些類的行為。3.以查詢取代派生變數 盡量...
重新組織資料(二)
6,duplicate observed data 複製 被監視資料 現象 你有一些領域資料置身於gui控制項中,而領域函式需要訪問這些資料 要點 將該資料複製到乙個領域物件中。建立乙個observer模式,用以同步領域物件和gui物件內的重複資料。7,change unidirectional a...