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

 

posted @ 2016-03-15 10:46  IT少年  阅读(1242)  评论(0编辑  收藏  举报