美文网首页
重构读书笔记-10_7-Preserve_Whole_Objec

重构读书笔记-10_7-Preserve_Whole_Objec

作者: MR_Model | 来源:发表于2019-07-22 09:17 被阅读0次

    重构第十章

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

    注意

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

    相关文章

      网友评论

          本文标题:重构读书笔记-10_7-Preserve_Whole_Objec

          本文链接:https://www.haomeiwen.com/subject/rffilctx.html