• 重构第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也放到了经常使用且适合它的类中了,所以此重构是一个比较好的重构,能让整个代码变得更加合理。

  • 相关阅读:
    【Educational Codeforces Round 101 (Rated for Div. 2) C】Building a Fence
    【Codeforces Round #698 (Div. 2) C】Nezzar and Symmetric Array
    【Codeforces Round #696 (Div. 2) D】Cleaning
    【Codeforces Round #696 (Div. 2) C】Array Destruction
    【Educational Codeforces Round 102 D】Program
    【Educational Codeforces Round 102 C】No More Inversions
    【Good Bye 2020 G】Song of the Sirens
    【Good Bye 2020 F】Euclid's nightmare
    使用mobx入门
    requestAnimationFrame 控制速度模拟setinterval
  • 原文地址:https://www.cnblogs.com/yplong/p/5278394.html
Copyright © 2020-2023  润新知