Feb. 05 10:30~10:58
▲Duplicate cat可以移除嗎?
Duplicated Code怪味道在〈談談壞味道(1):Duplicated Code〉介紹過,今天介紹如何用Extract Method與Extract Class來移除這個怪味道。首先看程式範例,你有FileUtil與HttpDownload兩個類別,你注意到在finally statement裡面關閉IO物件的程式碼在這兩個類別裡面都很類似:如果IO物件不是null,則呼叫它的close()函數。呼叫close()可能會拋出IOException,在這種狀況下已經「無藥可醫」,所以你決定忽略它(好一點的做法可以把例外log下來)。
要怎麼移除finally敘述中的重覆程式碼?
***
首先套用Extract Method,把關閉IO物件的程式碼抽離出來放到close()函數裡面:
然後將FileUtil與HttpDownload類別裡面關閉IO物件的地方改成呼叫close()函數:
***
改到這裡程式已經乾淨多了,但是FileUtil與HttpDownload類別裡面分別都有一個close()函數。這時候可以套用Extract Class,新增一個Cleaner類別,然後把close()函數移到它裡面。
最後讓FileUtil與HttpDownload類別改呼叫Cleaner裡面的close()函數。
***
友藏內心獨白:到目前為止都很簡單。
來點有難度的...
回覆刪除