zoukankan      html  css  js  c++  java
  • Refactoring Move Method(将方法移至常被调用的class中)

    代码
    // 重构前代码说明:

    //AccountInterest类拥有一个BankAccount的实例,BankAccount.CalculateInterestRate()方法在AccountInterest类中被调用,而此方法也并非和现在其live的类实例存在依赖关系(不一定被调用)


    /// <summary>
    /// 简单的银行帐号类
    /// </summary>
    public class BankAccount
    {
        
    public BankAccount(int accountAge, int creditScore,AccountInterest accountInterest)
        {
            AccountAge 
    = accountAge;
            CreditScore 
    = creditScore;
            AccountInterest 
    = accountInterest;
        }

         
    public int AccountAge { getprivate set; }
         
    public int CreditScore { getprivate set; }
         
    public AccountInterest AccountInterest { getprivate set; }

        
    /// <summary>
         
    /// 将被移除的方法,在其live的class中没有被使用(或者说很少被使用),所以考虑移植到使用最多的class中 AccountInterest,
         
    /// 提高代码的可读性和可维护性:经常用到的class需要读到,用到,改到此方法的代码的机率更高,同样此方法的修改最主要考虑的也是常用到它的类中的相关业务逻辑。
        
    /// </summary>
        
    /// <returns></returns>
         public double CalculateInterestRate()
         {
             
    if (CreditScore > 800)
             
    return 0.02;

             
    if (AccountAge > 10)
             
    return 0.03;

             
    return 0.05;
         }
     }

    /// <summary>
    /// 利息
    /// </summary>
     public class AccountInterest
     {
         
    public BankAccount Account { getprivate set; }

         
    public AccountInterest(BankAccount account)
         {
             Account 
    = account;
         }

         
    public double InterestRate
         {
             
    get { return Account.CalculateInterestRate(); }
         }

         
    public bool IntroductoryRate
         {
             
    get { return Account.CalculateInterestRate() < 0.05; }
         }
     }

    重构就变得很自然了,重构后的代码如下:


    /// <summary>
    /// 简单的银行帐号类
    /// </summary>
    public class BankAccount
    {
        
    public BankAccount(int accountAge, int creditScore,AccountInterest accountInterest)
        {
            AccountAge 
    = accountAge;
            CreditScore 
    = creditScore;
            AccountInterest 
    = accountInterest;
        }

         
    public int AccountAge { getprivate set; }
         
    public int CreditScore { getprivate set; }
         
    public AccountInterest AccountInterest { getprivate set; }
     
     }

    /// <summary>
    /// 利息
    /// </summary>
     public class AccountInterest
     {
         
    public BankAccount Account { getprivate set; }

         
    public AccountInterest(BankAccount account)
         {
             Account 
    = account;
         }

         
    public double InterestRate
         {
             
    get { return  CalculateInterestRate(); }
         }

         
    public bool IntroductoryRate
         {
             
    get { return   CalculateInterestRate() < 0.05; }
         }
         
    /// <summary>
         
    /// 方法存活在被常调用的类中,其逻辑和此类的关系更为密切。
         
    /// </summary>
         
    /// <returns></returns>
         public double CalculateInterestRate()
         {
             
    if (CreditScore > 800)
                 
    return 0.02;

             
    if (AccountAge > 10)
                 
    return 0.03;

             
    return 0.05;
         }
     }

    可维护性是衡量代码质量重要的标准之一,此重构值得考虑!

  • 相关阅读:
    DML 语句
    sql分组和聚集
    mysql 子查询 EXISTS
    tomcat设置字符集解决乱码问题
    eclipse 自动下载源码 ;eclipse 上截图
    数据库连接池
    谷歌搜索屏蔽敏感词汇
    JS实现跨域cookie、js实现跨域攻击
    大数据面试题型
    eclipse中一些常用快捷键,与用vs.net软件进行c#编程时进行相同的快捷键的设置
  • 原文地址:https://www.cnblogs.com/buaaboyi/p/1955739.html
Copyright © 2011-2022 走看看