您的位置:首页 > 其它

重构第10天:提取方法(Extract Method)

2016-03-20 23:00 183 查看
理解:经常写的代码中,有一些计算逻辑比较复杂的方法,写下来一个很长很长的方法,我们可以把这个方法,根据功能,分解成单独的几个小方法。这样做不仅能够增加代码的可维护性,而且增加了易读性。

详解

重构前代码:

public class Receipt
{
private IList<decimal> Discounts { get; set; }
private IList<decimal> ItemTotals { get; set; }

public decimal CalculateGrandTotal()
{
decimal subTotal = 0m;
foreach (decimal itemTotal in ItemTotals)
subTotal += itemTotal;

if (Discounts.Count > 0)
{
foreach (decimal discount in Discounts)
subTotal -= discount;
}

decimal tax = subTotal * 0.065m;

subTotal += tax;

return subTotal;
}
}


我们看到CalculateGrandTotal方法,里面用到了2个foreach循环,看一下,还真不宜理解,不晓得每个foreach主要做什么。

看看重构后的代码:

public class Receipt
{
private IList<decimal> Discounts { get; set; }
private IList<decimal> ItemTotals { get; set; }

public decimal CalculateGrandTotal()
{
decimal subTotal = CalculateSubTotal();

subTotal = CalculateDiscounts(subTotal);

subTotal = CalculateTax(subTotal);

return subTotal;
}

private decimal CalculateTax(decimal subTotal)
{
decimal tax = subTotal * 0.065m;

subTotal += tax;
return subTotal;
}

private decimal CalculateDiscounts(decimal subTotal)
{
if (Discounts.Count > 0)
{
foreach (decimal discount in Discounts)
subTotal -= discount;
}
return subTotal;
}

private decimal CalculateSubTotal()
{
decimal subTotal = 0m;
foreach (decimal itemTotal in ItemTotals)
subTotal += itemTotal;
return subTotal;
}
}


重构后,我们把CalculateGrandTotal方法分解成3个小方法,每个方法名称根据其功能命名。CalculateTax顾名思义,就是计算税收,CalculateDiscounts就是计算折扣金额。

这样就把逻辑剥离的很清楚了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: