zoukankan      html  css  js  c++  java
  • 移动方法

    概念:本文所讲的移动方法就是方法放在合适的位置(通常指放在合适的类中)。

     

    正文:移动方法是一个非常easy也非经常见的重构。仅仅要是系统就会存在非常多类,那么类里面包含非常多方法,假设一个方法经常被另外一个类使用(比本身的类使用还多)或者这种方法本身就不应该放在这个类里面,那么这个适合应该考虑把它移到合适的类中。代码例如以下:

    namespace LosTechies.DaysOfRefactoring.MoveMethod.Before
    {
        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; } } } }

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

    namespace LosTechies.DaysOfRefactoring.MoveMethod.After
    {
        public class AccountInterest
        {
            public BankAccount Account { get; private set; }
    
            public AccountInterest(BankAccount account)
            {
                Account = account;
            }
    
            public double InterestRate
            {
                get { return CalculateInterestRate(); }
            }
    
            public bool IntroductoryRate
            {
                get { return CalculateInterestRate() < 0.05; }
            }
    
            public double CalculateInterestRate()
            {
                if (Account.CreditScore > 800)
                    return 0.02;
    
                if (Account.AccountAge > 10)
                    return 0.03;
    
                return 0.05;
            }
        }
    }

    namespace LosTechies.DaysOfRefactoring.MoveMethod.After
    {
        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; }
        }
    }

    总结:这个重构法则在非常多时候能让我们把代码组织的结构调整得更合理,同一时候也能给以后的维护带来方便。

  • 相关阅读:
    gedit保存出现The file has been changed since reading it!!! Do you really want to write to it (y/n)?y
    8051处理器与Quatus Signal TypeⅡ进行板级调试
    DesignWare I2C模块的验证
    Denali NAND FLASH控制器的验证
    openocd安装与调试
    SPI协议介绍
    CAN协议学习(二)MCAN控制器介绍
    CAN协议学习(一)协议介绍
    Remosaic技术学习
    ISP算法:深入聊聊lens shading
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6708891.html
Copyright © 2011-2022 走看看