重构第10天:提取方法(Extract Method)
2016-03-20 23:00
183 查看
理解:经常写的代码中,有一些计算逻辑比较复杂的方法,写下来一个很长很长的方法,我们可以把这个方法,根据功能,分解成单独的几个小方法。这样做不仅能够增加代码的可维护性,而且增加了易读性。
详解:
重构前代码:
我们看到CalculateGrandTotal方法,里面用到了2个foreach循环,看一下,还真不宜理解,不晓得每个foreach主要做什么。
看看重构后的代码:
重构后,我们把CalculateGrandTotal方法分解成3个小方法,每个方法名称根据其功能命名。CalculateTax顾名思义,就是计算税收,CalculateDiscounts就是计算折扣金额。
这样就把逻辑剥离的很清楚了。
详解:
重构前代码:
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就是计算折扣金额。
这样就把逻辑剥离的很清楚了。
相关文章推荐
- HTML5桌面通知(Web Notifications)实例解析
- ECMAScript 6 学习笔记
- MySql中的存储过程
- 微分几何
- 冒泡排序和快速排序
- 软件破解技术之API替换
- hdu5646(数学)
- Android 应用界面开发笔记 自定义控件与Handler -待更新
- CURSOR Expressions
- jquery实现点击复制到剪切板
- OneZero第一次随感
- 深拷贝与浅拷贝
- 第二周学习问题总结
- 设计模式——工厂模式
- String类的深拷贝
- 详解C++的JSON静态链接库JsonCpp的使用方法
- Android5.x 新控件之RecyclerView使用总结
- 单线程模型中Message,Handler,MessageQueue,Looper之间的关系
- iOS中Cookie的使用
- RingBuffer