剑弑 发表于 2019-3-7 23:29:47

重构之搬移字段(Move Field)

             类的继承相信大家都很熟悉,基类中非私有属性字段,继承它的派生类都可以使用。当我们所有派生类都有同一个相同属性字段时,我们很自然的都会想到把这个属性字段放到基类里面;今天我们讲的跟这个很像,都对类中属性进行搬移。只不过一个是纵向搬移,一个是横向搬移,或者可以说我们把派生类的共有属性移到基类中,也是使用了搬移字段(Move Field)这重构手法。 我们先来看看代码
重构前

class Account
{
private AccountType _type;
private double _daysOverdrawn;

public double DaysOverdrawn { get; set; }

public double interestRate(double amount,int days)
{
return DaysOverdrawn * amount * days / 35;
}
}

重构后

class Account
    {
      private AccountType _type;
      private double _daysOverdrawn;

      public double DaysOverdrawn { get; set; }

public double interestRate(double amount, int days)
      {
            return _type.DaysOverdrawn * amount * days / 35;
      }
    }
class AccountType
    {
      private double _daysOverdrawn;

      public double DaysOverdrawn { get; set; }
    }

            搬移字段很简单,只是把一个类中的属性放到另一个类中,再删除原类的属性;但我们在什么情况下该使用这一手法呢?使用这一重构手法我们又要把原来的对该属性的引用及调用改成现有的,有必要花费这时间去重构吗?
             是的,搬移字段是有点浪费时间,但我们要想把我们的函数、类、框架重构好,就有必要花上这么点时间去做,因为搬移字段会让我们后面的重构工作更好开展。比如后面我会讲到的“提练类(Extract Class)"、"封装字段(Encapsu;ate Field)"、"自封装字段(Self Encapsu;ate Field)"等重构手法。至于什么情况下使用呢?其实你在任何情况下都可以进行搬移字段,只要你认为哪样做会让你更舒服;重构并没有唯一的答案,只要我们可读性好,容易让人理解你的代码,又能实现功能,又不影响性能就行。


参考文献
重构——改善既有代码的设计   【美】Martin Fowler 著
                                                                         熊节 译




页: [1]
查看完整版本: 重构之搬移字段(Move Field)