第13天:提取方法对象
这个重构建议是对第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天:提取方法对象相关推荐
- 《Android游戏开发详解》——第2章,第2.13节调用对象的行为
本节书摘来自异步社区<Android游戏开发详解>一书中的第2章,第2.13节调用对象的行为,作者 [美]Jonathan S. Harbour,更多章节内容可以访问云栖社区"异 ...
- Racket编程指南——13 类和对象
13 类和对象 本章基于一篇论文[Flatt06]. 一个类(class)表达式表示一类值,就像一个lambda表达式一样: (class superclass-expr decl-or-expr . ...
- [JS]笔记13之Date对象
-->获取与设置时间的方法 -->使用Date对象制作相应的效果 1.设置时间 创建一个时间对象 new Date(time); 设置时间 time 从1970年1月1日至 几种格式: n ...
- java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程
多态 多态指的是同一个方法调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1. 多态是方法的多态,不是属性的多态(多态与属性无关). 2. 多态的存在 ...
- 条款13:以对象管理资源
首先考虑一个工厂函数 Investment * createInvestment(); void f() {Investment * pInv = createInvestment();...dele ...
- 【C++深度剖析教程13】函数对象的分析
今天来学习函数对象.什么是函数对象呢?下面我们以一个例子来引出函数对象的概念. 假设我们需要编写一个函数,实现下面这些功能: -函数可以获得斐波那契数列每一项的值 -每调用一次返回一个值 -函数可根据 ...
- MATLAB与STK互联13:卫星对象操作(4)—三维显示
上篇博文介绍了STK中卫星对象的二维显示属性及设置,本篇介绍卫星对象的三维显示属性及设置.先上代码: uiap = actxserver('STK11.application'); root = ui ...
- c++学习13 类与对象(二)c++对象模型和this指针和友元
类和对象 c++对象模型和this指针 成员变量和成员函数分开存储 在c++中类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象 #include<iostream> us ...
- Effective C++ 条款13 以对象管理资源
// // main.cpp // 条款13:以对象管理资源 // // Created by 于磊 on 2018/7/8. // Copyright © 2018 于磊. All rights r ...
最新文章
- 听听阿里老哥对算法工程师技术学习路线的建议
- python 开发版-Micropython开发板固件烧写教程
- JZOJ 5466. 【NOIP2017提高A组冲刺11.9】玩游戏
- delphi cxgrid读取本地image_技术讨论 | PHP本地文件包含漏洞GetShell
- wpf mysql存储过程_MySQL存储过程的创建及调用
- Spring JDK动态代理
- CPU的温度是360的准还是鲁大师的准?
- 如何制作圆角布局..?
- 深入研究ActivityMQ
- 使用 Infiniband 实现 RDMA !IB卡介绍!下载IB 驱动 !lspci | grep Mell 查看 IB卡!
- Springer LNCS Latex 模板 无法下载
- 如何做一份漂亮的年终总结报告?教你5个实用套路
- python 当前日期_python 当前时间获取方法
- 相对湿度与绝对湿度_如何监视家里的湿度水平
- signature=4d7e0a8216b57730ec16fe4e5ae2b93f,dragonfly对接harbor拉取镜像没有走dragonfly问题
- element-ui的upload 上传组件 照片墙当超过限定图片后隐藏上传按钮
- 廖雪峰python#统计学生人数
- 一年中有12个月,每个月的天数是不一样的,其中有7个月为31天称为大月,分别为1,3,5,7,8,10,12月, 有4个月为30天,称为小月,分别为4,6,9,11月,还有二月较特殊,平年的二月有28
- 厨神之路六--凉拌菜
- ## 嵌入式软件编程