zoukankan      html  css  js  c++  java
  • 重构第2天:方法搬移(Move Method)

         现在就重构来说是非常普通的,虽然我们经常会漏掉或忽略一些需要重构的地方。方法搬移,正如所定义的那样,把方法搬移到更适合他的位置。让我们看看下面这一段重构前的代码:

    理解:方法搬移,正如所定义的那样,把方法搬移到更适合他的位置。

    详解:如果一个类中某个方法,经常被其他类使用(比自身使用的次数还多),或者这个方法本身不适合这个类,可以考虑把这个方法搬移到更适合他的类中。

     public class BankAccount
        {
            public BankAccount(int accountAge, int creditScore, AccountInterest accountInterest)
            {
                AccountAge = accountAge;
                CreditScore = creditScore;
                AccountInterest = accountInterest;
            }
    
            public int AccountAge { get; private set; }
            public int CreditScore { get; private set; }
            public AccountInterest AccountInterest { get; private set; }
    
            public double CalculateInterestRate()
            {
                if (CreditScore > 800)
                    return 0.02;
    
                if (AccountAge > 10)
                    return 0.03;
    
                return 0.05;
            }
        }
     public class AccountInterest
        {
            public BankAccount Account { get; private set; }
    
            public AccountInterest(BankAccount account)
            {
                Account = account;
            }
    
            public double InterestRate
            {
                get { return Account.CalculateInterestRate(); }
            }
    
            public bool IntroductoryRate
            {
                get { return Account.CalculateInterestRate() < 0.05; }
            }
        }

    重构后的代码:

     1 public class BankAccount
     2     {
     3         public BankAccount(int accountAge, int creditScore, AccountInterest accountInterest)
     4         {
     5             AccountAge = accountAge;
     6             CreditScore = creditScore;
     7             AccountInterest = accountInterest;
     8         }
     9 
    10         public int AccountAge { get; private set; }
    11         public int CreditScore { get; private set; }
    12         public AccountInterest AccountInterest { get; private set; }
    13 
    14         
    15     }
    16  public class AccountInterest
    17     {
    18         public BankAccount Account { get; private set; }
    19 
    20         public AccountInterest(BankAccount account)
    21         {
    22             Account = account;
    23         }
    24 
    25         public double InterestRate
    26         {
    27             get { return CalculateInterestRate(); }
    28         }
    29 
    30         public bool IntroductoryRate
    31         {
    32             get { return CalculateInterestRate() < 0.05; }
    33         }
    34 
    35         public double CalculateInterestRate()
    36         {
    37             if (Account.CreditScore > 800)
    38                 return 0.02;
    39 
    40             if (Account.AccountAge > 10)
    41                 return 0.03;
    42 
    43             return 0.05;
    44         }
    45     }

    我们将CalculateInterestRate方法从BankAccount类搬移到 AccountInterest类中,因为这个方法在AccountInterest类中使用,而在自身没有看到使用。并且CalculateInterestRate方法更适合AccountInterest类。

    搬移后大家可以看到BankAccount类的职责也单一,同时CalculateInterestRate也放到了经常使用且适合它的类中了,所以此重构是一个比较好的重构,能让整个代码变得更加合理。

  • 相关阅读:
    CS224d lecture 16札记
    CS224d lecture 15札记
    CS224d lecture 14札记
    CS224d lecture 13札记
    将博客搬至CSDN
    三张图理解JavaScript原型链
    三道题理解软件流水
    网络安全密码学课程笔记
    “wuliao“(无聊)聊天软件
    大二小学期C#资产管理大作业小记
  • 原文地址:https://www.cnblogs.com/yplong/p/5278394.html
Copyright © 2011-2022 走看看