剑弑 发表于 2019-2-27 23:08:12

重构之分解临时变量(Split Temporary Variable)

啥也不说先来看看一段代码
重构前

public double getDistanceTravelled(int time)
      {
            double result;
            double acc=_primaryForec / _mass;
            int primaryTime = Math.Min(time,_delay);
            result = 0.5 * acc * primaryTime * primaryTime;
            int secondaryTime = time - _delay;
            if (secondaryTime > 0)
            {
                double primaryVel = acc * _delay;
                acc = (_primaryForec + _secondaryFore) / _mass;
                result += primaryVel * secondaryTime + 0.5 * acc * secondaryTime * secondaryTime;
            }
            return result;
      }

重构后

public double getDistanceTravelled1(int time)
      {
            double result;
            double primaryAcc = _primaryForec / _mass;
            int primaryTime = Math.Min(time, _delay);
            result = 0.5 * primaryAcc * primaryTime * primaryTime;
            int secondaryTime = time - _delay;
            if (secondaryTime > 0)
            {
                double primaryVel = primaryAcc * _delay;
                double secondaryAcc = (_primaryForec + _secondaryFore) / _mass;
                result += primaryVel * secondaryTime + 0.5 * secondaryAcc * secondaryTime * secondaryTime;
            }
            return result;
      }

这一种重构手法实在没什么好说的,仔细比对下代码就能明白是什么回事;但以下两种临时变量,被多次赋值时不能使用此手法循环变量:会随着循环的每次运行而改变;
结果收集变量:负责将"通过整个函数的运算"而构成的某个值收集起来。


注:重构后的代码并不是最后的重构代码,还需采用别的重构手法进行重构;如有兴趣的小伙伴可以自行试着重构下。

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


ibcadmin 发表于 2019-2-28 11:19:22

逍遥哥 笔记本纪念品我给你留着
页: [1]
查看完整版本: 重构之分解临时变量(Split Temporary Variable)