- 作法(Mechanics)
- 找出[你想去除的指針]的保存值域,檢查它的每一個用戶,判斷是否可以去除該指針.
- ==>不但要檢查[直接讀取點],也要檢查[直接讀取點]的調(diào)用函數(shù).
- ==>考慮有無可能不通過指針函數(shù)取得[被引用對象](referred object).如果有可能,你就可以對取值函數(shù)(getter)使用Substitute Algorithm(139).從而讓客戶在沒有指針的情況下也可以使用該取值函數(shù).
- ==>對于使用該值域的所有函數(shù),考慮將[被引用對象](referred object)作為引數(shù)(argument)傳進(jìn)去.
- 如果客戶使用了取值函數(shù)(getter),先運用Self Encapsulate Field(171)將[待除值域]自我封裝起來,然后使用Subsitute Algorithm(139)對付取值函數(shù),令它不再使用該(待除)值域.然后編譯,測試.
- 如果客戶并使用取值函數(shù)(getter),那就直接修改[待除值域]的所有被引用點:改以其他途徑獲得該值域所保存的對象.每次修改后,編譯并測試.
- 如果已經(jīng)沒有任何函數(shù)使用該(待除)值域,移除所有[對該值域的更新邏輯],然后移除該值域.
- ==>如果有許多地方對此值域賦值,先運用Self Encapsulate Field(171)使這些地點改用同一個設(shè)值函數(shù)(setter).編譯,測試.而后將這個設(shè)值函數(shù)的本體清空.再編譯,再測試.如果這些都可行,就可以將此值域和其設(shè)值函數(shù),連同對設(shè)值函數(shù)的所有調(diào)用,全部移除.
- 編譯,測試.
|