l

2016年3月16日 星期三

用Preserve Whole Object移除Long Parameter List怪味道

March 14 15:00~15:28

螢幕截圖 2016-03-14 15.25.07

 

▼消除Long Parameter List怪味道的另一個重構是Preserve Whole Object,顧名思義這個重構就是將整個物件當成參數傳給函數。Car類別的getDetailInfo()函數接受兩個來自於Person物件的字串。

螢幕截圖 2016-03-14 15.03.11

螢幕截圖 2016-03-14 15.09.38

***

▼直接傳入Person物件用以取代兩個基本型別的參數。

螢幕截圖 2016-03-14 15.11.25

 

這個重構看起來很簡單,有些鄉民甚至可能覺得是廢話。但打開身邊的程式碼一看,還是經常可以看到類似重構前的函數參數。一種可能的原因是只用到物件的少數資料成員,傳入整個物件好像很麻煩,除了客戶端(函數本身)要知到要從物件身上讀取哪些欄位,測試的時候也有點小麻煩,因為要產生整個物件,而不是傳入幾個基本型別的參數就好了。

傳入整個物件有一個好處,如果客戶端需要從物件身上讀取的資料變多了,也不用修改函數介面(參數個數不變)。如果真的覺得傳入整個物件過於沉重,也許是一種「原本物件界面過於肥大」的跡象,可以思考是否套用Extract Calss或Extract Interface幫類別瘦身。

***

友藏內心獨白:沒有絕對,要看使用情境。

沒有留言:

張貼留言