昨天講完參數的垂直移動,有時候我們還會想要將參數整理成 Value Object
或是 Parameter Object
,讓方法/函式的簽章簡潔一點,來看看我們有哪些招數可以用吧!
這是程式原本的樣子。我想要將 IsBetween 當中的時間參數打包進 DateRange。
這裡只是簡單的把原本裸露的原始型別 primitive 替換成物件。這步驟只能手動做,Rider 沒辦法幫我,其實不是很安全,需要小心再小心。
接著用昨天學會的 Inline Parameter
。
把兩個時間參數勾起來,Rider 還提醒我會有新的參數 dateRange 被加進去。
成功!
前幾天都有提到,Rider 在處理方法簽章的時候,如果涉及多個操作,很容易有 bug。前面做的 Inline Parameter
其實包含了兩步驟:添加新參數、inline 舊參數。
假設我的起手式稍微不同,例如這邊把 dateRange 物件放到 lambda 中來建立。
一樣在 Inline Parameter
選取兩個時間參數。
Boom!壞掉了。Rider 並沒有幫我把 dateRange 加到參數中。
這時候可以參考傳統的重構步驟。先退回上一步,然後在方法的呼叫中把 dateRange 加進去,這時候編譯會是壞的,不過別擔心,我們馬上會修好。
使用熟悉的 Show Context Actions
,聰明的 Rider 馬上就說可以幫我把新參數加進去,直接按下去!
這時候編譯已經修好了,不過新加的參數還沒有被引用。
這時再執行一次 Inline Parameter
。
這次就順順利利的成功啦~
這次我選擇在 IsBetween 中建立 dateRange 物件。這步驟一樣是手動,一樣要非常小心。
接著選擇 Introduct Parameter
。
成功!
前面的操作都是建立在 DateRange 型別已經存在的前提下,若是還不存在,我們可以用 Transform Parameters
選取要抽成物件的參數,按下 Next。
完成。
今天開始有點用 combo 技來重構的感覺了。如同 Kent Beck 的 《TDD By Example》中提到的,開發時會有不同不同的路徑,某些路徑能用較小而確實的步伐來走,某些路徑則相反。日常的重構也是這樣。
而今天也可以看到一些 IDE 的極限,有些事情 IDE 做不到,只能靠人工來做,有些時候 IDE 也會有 bug。這時候如果有個測試,還是最好的!