重構第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就是計算折扣金額。

這樣就把邏輯剝離的很清楚了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM