zoukankan      html  css  js  c++  java
  • 重构22-Break Method(重构方法)

    这个重构是一种元重构(meta-refactoring),它只是不停地使用提取方法重构,直到将一个大的方法分解成若干个小的方法。下面的例子有点做作,AcceptPayment方法没有丰富的功能。因此为了使其更接近真实场景,我们只能假设该方法中包含了其他大量的辅助代码。 下面的AcceptPayment方法可以被划分为多个单独的方法。

    public class CashRegister {
    public CashRegister() {
    Tax = 0.06d;
    }
    private Double Tax;
    public void AcceptPayment(Customer customer, List<Product> products,Double payment) {
    Double subTotal = 0d;
    for(Product product : products) {
    subTotal += product.Price;
    }
    for(Product product : products) {
    subTotal -= product.AvailableDiscounts;
    }
    Double grandTotal = subTotal * Tax;
    customer.DeductFromAccountBalance(grandTotal);
    }
    }
    public class Customer {
    public void DeductFromAccountBalance(Double amount) {
    // deduct from balance
    }
    }
    public class Product {
    public Double Price;
    public Double AvailableDiscounts;
    }
    如您所见,AcceptPayment方法包含多个功能,可以被分解为多个子方法。因此我们
    多次使用提取方法重构,结果如下: 
    public class CashRegister {
    public CashRegister() {
    Tax = 0.06d;
    }
    private Double Tax;
    private List<Product> Products;
    public void AcceptPayment(Customer customer, List<Product> products, Double payment) {
    Double subTotal = CalculateSubtotal();
    subTotal = SubtractDiscounts(subTotal);
    Double grandTotal = AddTax(subTotal);
    SubtractFromCustomerBalance(customer, grandTotal);
    }
    private void SubtractFromCustomerBalance(Customer customer, Double grandTotal) {
    customer.DeductFromAccountBalance(grandTotal);
    }
    private Double AddTax(Double subTotal) {
    return subTotal * Tax;
    }
    private Double SubtractDiscounts(Double subTotal) {
    for(Product product : Products){
    subTotal -= product.AvailableDiscounts;
    }
    return subTotal;
    }
    private Double CalculateSubtotal() {
    Double subTotal = 0d;
    for(Product product : Products){
    subTotal += product.Price;
    }
    return subTotal;
    }
    }
    public class Customer {
    public void DeductFromAccountBalance(Double amount) {
    // deduct from balance
    }
    }
    public class Product {
    public Double Price;
    public Double AvailableDiscounts;
    }
     
     





  • 相关阅读:
    LINQ查询表达式(5)
    LINQ查询表达式(4)
    并不对劲的loj2279
    并不对劲的bzoj1563:p1912:[NOI2009]诗人小G
    并不对劲的loj507
    并不对劲的loj2332
    并不对劲的loj6191
    并不对劲的bzoj4552:p2824:[HEOI2016/TJOI2016]排序
    并不对劲的bzoj3924:loj2135:p3345:[ZJOI2015]幻想乡战略游戏
    并不对劲的bzoj3295:[CQOI2011]动态逆序对
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786361.html
Copyright © 2011-2022 走看看