首页 > 其他 > 详细

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

时间:2016-03-20 23:57:05      阅读:443      评论:0      收藏:0      [点我收藏+]

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

详解

重构前代码:

 1 public class Receipt
 2     {
 3         private IList<decimal> Discounts { get; set; }
 4         private IList<decimal> ItemTotals { get; set; }
 5 
 6         public decimal CalculateGrandTotal()
 7         {
 8             decimal subTotal = 0m;
 9             foreach (decimal itemTotal in ItemTotals)
10                 subTotal += itemTotal;
11 
12             if (Discounts.Count > 0)
13             {
14                 foreach (decimal discount in Discounts)
15                     subTotal -= discount;
16             }
17 
18             decimal tax = subTotal * 0.065m;
19 
20             subTotal += tax;
21 
22             return subTotal;
23         }
24     }

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

看看重构后的代码:

 1 public class Receipt
 2     {
 3         private IList<decimal> Discounts { get; set; }
 4         private IList<decimal> ItemTotals { get; set; }
 5 
 6         public decimal CalculateGrandTotal()
 7         {
 8             decimal subTotal = CalculateSubTotal();
 9 
10             subTotal = CalculateDiscounts(subTotal);
11 
12             subTotal = CalculateTax(subTotal);
13 
14             return subTotal;
15         }
16 
17         private decimal CalculateTax(decimal subTotal)
18         {
19             decimal tax = subTotal * 0.065m;
20 
21             subTotal += tax;
22             return subTotal;
23         }
24 
25         private decimal CalculateDiscounts(decimal subTotal)
26         {
27             if (Discounts.Count > 0)
28             {
29                 foreach (decimal discount in Discounts)
30                     subTotal -= discount;
31             }
32             return subTotal;
33         }
34 
35         private decimal CalculateSubTotal()
36         {
37             decimal subTotal = 0m;
38             foreach (decimal itemTotal in ItemTotals)
39                 subTotal += itemTotal;
40             return subTotal;
41         }
42     }

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

这样就把逻辑剥离的很清楚了。

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

原文:http://www.cnblogs.com/yplong/p/5300144.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!