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

Posted IT少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重构第10天:提取方法(Extract Method)相关的知识,希望对你有一定的参考价值。

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

详解

重构前代码:

 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)的主要内容,如果未能解决你的问题,请参考以下文章

重构第6天:降低字段(Push Down Field)

重构第4天:降低方法(Push Down Method)

BigQuery - JSON_EXTRACT 仅提取第一个条目

机器学习入门-提取文章的主题词 1.jieba.analyse.extract_tags(提取主题词)

重构第5天:提升字段(Pull Up Field)

extract method - 提取方法