这个重构建议是对第10天:提取方法的继续

我们在一个类中提取出来了大量的私有方法和变量,会造成这个类臃肿不堪,难以阅读

因此最好提取出来方法对象,用以将功能的一个个逻辑分离开

旧的代码:

Codepublic class OrderInfo{public decimal Price { get; private set; }}public class Order{private IList<OrderInfo> OrderLineItems { get; set; }private IList<decimal> Discounts { get; set; }private decimal Tax { get; set; }public decimal Calculate(){decimal subTotal = 0m;// Total up line itemsforeach (OrderInfo lineItem in OrderLineItems){subTotal += lineItem.Price;}// Subtract Discountsforeach (decimal discount in Discounts)subTotal -= discount;// Calculate Taxdecimal tax = subTotal * Tax;// Calculate GrandTotaldecimal grandTotal = subTotal + tax;return grandTotal;}}

重构后的代码,我们通过构造方法,将返回计算结果的类的引用传递给包含多个计算方法的新建对象,或者向方法对象的构造函数中单独传递各个参数。

:

Codepublic class OrderInfo{public decimal Price { get; private set; }}public class Order{public IEnumerable<OrderInfo> OrderLineItems { get; private set; }public IEnumerable<decimal> Discounts { get; private set; }public decimal Tax { get; private set; }public decimal Calculate(){return new OrderCalculator(this).Calculate();}}public class OrderCalculator{private decimal SubTotal { get; set; }private IEnumerable<OrderInfo> OrderLineItems { get; set; }private IEnumerable<decimal> Discounts { get; set; }private decimal Tax { get; set; }public OrderCalculator(Order order){OrderLineItems = order.OrderLineItems;Discounts = order.Discounts;Tax = order.Tax;}public decimal Calculate(){CalculateSubTotal();SubtractDiscounts();CalculateTax();return SubTotal;}private void CalculateSubTotal(){// Total up line itemsforeach (OrderInfo lineItem in OrderLineItems)SubTotal += lineItem.Price;}private void SubtractDiscounts(){// Subtract Discountsforeach (decimal discount in Discounts)SubTotal -= discount;}private void CalculateTax(){// Calculate TaxSubTotal += SubTotal * Tax;}}

转载于:https://www.cnblogs.com/ysuhy/archive/2010/01/05/1639785.html

第13天:提取方法对象相关推荐

  1. 《Android游戏开发详解》——第2章,第2.13节调用对象的行为

    本节书摘来自异步社区<Android游戏开发详解>一书中的第2章,第2.13节调用对象的行为,作者 [美]Jonathan S. Harbour,更多章节内容可以访问云栖社区"异 ...

  2. Racket编程指南——13 类和对象

    13 类和对象 本章基于一篇论文[Flatt06]. 一个类(class)表达式表示一类值,就像一个lambda表达式一样: (class superclass-expr decl-or-expr . ...

  3. [JS]笔记13之Date对象

    -->获取与设置时间的方法 -->使用Date对象制作相应的效果 1.设置时间 创建一个时间对象 new Date(time); 设置时间 time 从1970年1月1日至 几种格式: n ...

  4. java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程

    多态 多态指的是同一个方法调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1. 多态是方法的多态,不是属性的多态(多态与属性无关). 2. 多态的存在 ...

  5. 条款13:以对象管理资源

    首先考虑一个工厂函数 Investment * createInvestment(); void f() {Investment * pInv = createInvestment();...dele ...

  6. 【C++深度剖析教程13】函数对象的分析

    今天来学习函数对象.什么是函数对象呢?下面我们以一个例子来引出函数对象的概念. 假设我们需要编写一个函数,实现下面这些功能: -函数可以获得斐波那契数列每一项的值 -每调用一次返回一个值 -函数可根据 ...

  7. MATLAB与STK互联13:卫星对象操作(4)—三维显示

    上篇博文介绍了STK中卫星对象的二维显示属性及设置,本篇介绍卫星对象的三维显示属性及设置.先上代码: uiap = actxserver('STK11.application'); root = ui ...

  8. c++学习13 类与对象(二)c++对象模型和this指针和友元

    类和对象 c++对象模型和this指针 成员变量和成员函数分开存储 在c++中类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象 #include<iostream> us ...

  9. Effective C++ 条款13 以对象管理资源

    // // main.cpp // 条款13:以对象管理资源 // // Created by 于磊 on 2018/7/8. // Copyright © 2018 于磊. All rights r ...

最新文章

  1. 听听阿里老哥对算法工程师技术学习路线的建议
  2. python 开发版-Micropython开发板固件烧写教程
  3. JZOJ 5466. 【NOIP2017提高A组冲刺11.9】玩游戏
  4. delphi cxgrid读取本地image_技术讨论 | PHP本地文件包含漏洞GetShell
  5. wpf mysql存储过程_MySQL存储过程的创建及调用
  6. Spring JDK动态代理
  7. CPU的温度是360的准还是鲁大师的准?
  8. 如何制作圆角布局..?
  9. 深入研究ActivityMQ
  10. 使用 Infiniband 实现 RDMA !IB卡介绍!下载IB 驱动 !lspci | grep Mell 查看 IB卡!
  11. Springer LNCS Latex 模板 无法下载
  12. 如何做一份漂亮的年终总结报告?教你5个实用套路
  13. python 当前日期_python 当前时间获取方法
  14. 相对湿度与绝对湿度_如何监视家里的湿度水平
  15. signature=4d7e0a8216b57730ec16fe4e5ae2b93f,dragonfly对接harbor拉取镜像没有走dragonfly问题
  16. element-ui的upload 上传组件 照片墙当超过限定图片后隐藏上传按钮
  17. 廖雪峰python#统计学生人数
  18. 一年中有12个月,每个月的天数是不一样的,其中有7个月为31天称为大月,分别为1,3,5,7,8,10,12月, 有4个月为30天,称为小月,分别为4,6,9,11月,还有二月较特殊,平年的二月有28
  19. 厨神之路六--凉拌菜
  20. ## 嵌入式软件编程

热门文章

  1. seo优化无法避免却又无可奈何的问题
  2. python selenium 文件上传_python+selenium 文件上传
  3. JVM 调优 —— 新生代 Survivor 空间不足
  4. Amazon宣布将MXNet作为AWS的深度学习框架——貌似性能比tf高啊
  5. Python中使用Flask、MongoDB搭建简易图片服务器
  6. spark 任务运行原理
  7. 洛谷P2679 子串
  8. 算法自动化测试的挑战与思考
  9. java课堂疑问解答与思考1
  10. HTML canvas font 属性