l

2016年3月22日 星期二

用Replace Array With Object移除Primitive Obsession怪味道

March 18 16:24~17:40

螢幕截圖 2016-03-18 17.48.55

 

Primitive Obsession怪味道的說明請參考〈談談壞味道(5):Data Clumps & Primitive Obsession〉,今天介紹Replace Array With Object重構來移除這個怪味道。

▼HostChecker類別被設計用來檢查電腦的健康狀況,它包含一個Command物件_cmd,透過這個Command物件執行真正的檢查工作。HostChecker的execute()函數會呼叫_cmd.run()並回傳一個字串陣列代表檢查結果。

螢幕截圖 2016-03-18 17.21.24

 

▼以下測試案例展示客戶端使用HostChecker類別的方式,客戶端必須要自己知道呼叫execute()函數回傳的字串陣列的格式。例如,陣列0表示檢查狀態字串,陣列1表示檢查狀態代號,陣列2表示檢查狀態說明,陣列3是空字串,在這裡看不出代表什麼意義。

螢幕截圖 2016-03-18 17.27.11

***

▼套用Replace Array With Object重構,把execute()函數回傳的字串陣列改成回傳物件。首先新增CheckResult類別用來代表execute()函數的回傳值。

螢幕截圖 2016-03-18 17.38.30

 

▼把HostChecker的execute函數回傳值改成CheckResult。

螢幕截圖 2016-03-18 17.40.43

 

▼重構之後由測試案例便可看出使用物件的語意比回傳字串陣列要清楚很多。

螢幕截圖 2016-03-18 17.42.30

***

友藏內心獨白:看到這個重構發出會心的一笑。

沒有留言:

張貼留言