重构第2天:方法搬移(Move Method)

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

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

详解:若是一个类中某个方法,常常被其余类使用(比自身使用的次数还多),或者这个方法自己不适合这个类,能够考虑把这个方法搬移到更适合他的类中。code

 

 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; }
        }
    }

重构后的代码:blog

 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类。get

搬移后你们能够看到BankAccount类的职责也单一,同时CalculateInterestRate也放到了常用且适合它的类中了,因此此重构是一个比较好的重构,能让整个代码变得更加合理。it

相关文章
相关标签/搜索