Feb. 09 20:30~20:51
▲封裝中
▼Monitor類別有一個isCritical()函數用來監控硬體設備的狀況,Monitor包含一個Sensor物件,透過它來讀取實際硬體設備的數據。
由上面程式可以看得出來Sensor句有典型Data Class怪味道,它的資料成員都是public,而且沒有任何行為。我們發現其實Sensor可以自己判斷自己的狀態,所以首先套用Move Method把isCritical()的邏輯移到Sensor身上,然後再套用Encapsulate Field封裝Sensor的資料成員。
▼重構後的Sensor如下:
▼isCritical()的判斷邏輯移到Sensor身上之後,Monitor的isCritical()直需要直接呼叫Sensor的isCritical()即可。
***
友藏內心獨白:重構之後Monitor好像變成Data Class。
現今的Entity Framework, 不就是用public class做成Data Class(POCO)
回覆刪除那Data Class為何是怪味道?
你可以參考 http://www.martinfowler.com/bliki/AnemicDomainModel.html 這篇。
回覆刪除