第13天:提取方法对象

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

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

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

旧的代码:

Code
   public 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 items
            foreach (OrderInfo lineItem in OrderLineItems)
            {
                subTotal += lineItem.Price;
            }
            // Subtract Discounts
            foreach (decimal discount in Discounts)
                subTotal -= discount;
            // Calculate Tax
            decimal tax = subTotal * Tax;
            // Calculate GrandTotal
            decimal grandTotal = subTotal + tax;
            return grandTotal;
        }
    }

 

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

:

Code
    public 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 items
            foreach (OrderInfo lineItem in OrderLineItems)
                SubTotal += lineItem.Price;
        }
        private void SubtractDiscounts()
        {
            // Subtract Discounts
            foreach (decimal discount in Discounts)
                SubTotal -= discount;
        }
        private void CalculateTax()
        {
            // Calculate Tax
            SubTotal += SubTotal * Tax;
        }
    }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值