在开始写之前,我想了很久,实在想不出很好的解释去讲解这一重构手法的所以然来;所以我们就直接从代码上入手吧。重构前
[C#] 纯文本查看 复制代码
public int discount(int inputVal,int quantity,int yearToDate)
{
if (inputVal>50)
{
inputVal -= 2;
}
if (quantity>100)
{
inputVal -= 1;
}
if (yearToDate>10000)
{
inputVal -= 4;
}
return inputVal;
}
重构后
[C#] 纯文本查看 复制代码
public int discount1(int inputVal, int quantity, int yearToDate)
{
int result = inputVal;
if (inputVal > 50)
{
result -= 2;
}
if (quantity > 100)
{
result -= 1;
}
if (yearToDate > 10000)
{
result -= 4;
}
return result;
}
从上面的代码段看,相信大家都会有一些疑问,这样重构有何意义呢?不就增加了个临时变量和更改了赋值吗?不增加不改变不还是一样。。。。。
这正是为什么在写之前想了很久,因为大家的这些疑问我也存在过;但大家有没有想过如果传入的参数是一个对象呢?而函数又带有了复杂逻辑,这样就很可能把人弄迷糊了,所以当你函数里存在对参数进行了赋值你大可先考虑下是否要用“ 重构之移除对参数的赋值(Remove Assignments to Parameters)”这一手法先进行一次重构,然后在去使用其实的重构手法把函数重构的漂漂亮亮的。
参考文献
重构——改善既有代码的设计 【美】Martin Fowler 著
熊节 译
|