• 重构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;
    }
     
     





  • 相关阅读:
    docker备忘录
    GUAVA-RateLimit
    JDK各版本发展史
    C++ 基础备忘录
    浅谈MES
    MES在流程和离散制造企业的15个差别!
    mysql连接oracle补偿方案—odbc驱动
    WinForm控件Chart的图表类型
    C#的异常处理机制(try...catch...finally)
    oracle 横向列变为纵向列
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786361.html
Copyright © 2020-2023  润新知