重构读书笔记-10_7-Preserve_Whole_Objec

2019-07-22  本文已影响0人  MR_Model

重构第十章

7.Preserve Whole Object(保持对象完整)

你从某个对象中去除若干值,将它们作为某一次函数调用时的参数。改使用(传递)整个对象。

Example:

class Room...
    boolean withinPlan(HeatingPlan plan) {
        int low = daysTempRange().getLow();
        int high = daysTempRange().getHigh();
        return plan.withinRange(low, high);
    }
class HeatingPlan...
    boolean withinRange(int low, int high) {
        return (low >= _range.getLow() && high <= _range.getHigh());
    }
    private TempRange _range;

Analyse:

设置一个class TempRange来代替low和high传入withinRange的函数

class Room...
    boolean withinPlan(HeatingPlan plan) {
        return plan.withinRange(daysTempRange);
    }
class HeatingPlan...
    boolean withinRange(TempRange roomRange) {
        return (roomRange.low >= _range.getLow() && roomRange.high <= _range.getHigh());
    }
    private TempRange _range;

withinRange函数重构后和TempRange关系密切,可以使用Move Method(搬移函数)的方法,把withinRange函数主体放到TempRange中,在原调用点调用新的函数。

End:

class HeatingPlan...
    boolean withinRange(TempRange roomRange) {
        return _range.includes(roomRange);
    }
class TempRange...
    boolean includes (TempRange arg) {
        return (arg.getLow() >=this.getLow() && arg.getHigh() <= this.getHigh());
    }

Conclusion:

Preserve Whole Object(保持对象完整)将对象当成一个参数传入函数中,万一将来被调用函数需要新的数据项,可以不再一一修改;可以消除过长参数带来的阅读困难的问题。
问题在于,传入整个对象,会产生对象之间的依存关系。

注意

重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!
上一篇 下一篇

猜你喜欢

热点阅读