重构第十章
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(保持对象完整)将对象当成一个参数传入函数中,万一将来被调用函数需要新的数据项,可以不再一一修改;可以消除过长参数带来的阅读困难的问题。
问题在于,传入整个对象,会产生对象之间的依存关系。
注意
重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!
网友评论