很常在遺留代碼中發現方法很長,想整理卻不知道從何開始,所以今天想分享一些可以抽取方法的特徵,如果之後遇到類似代碼時,或許是一個好機會思考是否抽取方法。
每一段迴圈都可以思考是否適合抽取方法
foreach (var number in numbers)
{
if (number % 2 == 0)
{
evenNumbers.Add(number);
}
}
或者根據不同條件,把東西放到某個變數時,也是可以思考的點
decimal discount = 1;
if (maxCombination == 2)
{
discount = 0.95m;
}
else if (maxCombination == 3)
{
discount = 0.9m;
}
else if (maxCombination == 4)
{
discount = 0.8m;
}
else if (maxCombination == 5)
{
discount = 0.75m;
}
甚至每個段落也都是可以抽取方法特徵
可以發現在51行以及55行都有空白行,在同一列縮排中出現空白行,通常意味著可以思考一下是否每個段落的功能較為獨立,可以他們拆進個自己的方法中。如此一來,原本的方法就更為精簡,讓其專注在控制流程。
其實判斷什麼時候該抽取方法不算太難,但是有時候我們會發現一個方法裡面做了太多了事情,或者那一段邏輯相依太多東西,導致抽取後反而更複雜或隱藏bug。明天會再用一些簡單的情況來聊一些自己在抽取了不適合的代碼後會導致什麼狀況。