l

2016年4月5日 星期二

用ReplaceType Code with Class移除Primitive Obsession怪味道

March 27 22:10~22:38

螢幕截圖 2016-03-27 23.54.11

 

▼以下範例截錄自《Refactoring》一書。Person類別的用int代表血型,並且宣告了四個常數0、1、2、3分別用來代表O、A、B、AB型。這種寫法的問題是,如果客戶端程式在設定血型的時候沒有使用Person所宣告的血型常數,例如呼叫setBloodGroup(10),則會造成程式執行期間錯誤。

螢幕截圖 2016-03-27 22.14.50

***

▼解決方法也很簡單,就是套用enum即可。如果程式語言沒有支援,也可以套用ReplaceType Code with Class重構自己寫。如下所示,用BolldGroup類別來代表血型。

螢幕截圖 2016-03-27 22.21.02

 

▼接著修改Person類別,將血型由int改成BloodGroup類別。

螢幕截圖 2016-03-27 22.23.38

 

▼由測試案例就可看出重構前後的差異,下圖為重構前使用整數代表血型。

螢幕截圖 2016-03-27 22.25.59

 

▼重構後。

螢幕截圖 2016-03-27 22.30.11

***

友藏內心獨白:直接用enum就可以了。

沒有留言:

張貼留言