保存整个对象
问题
从对象中获取几个值,然后将它们作为参数传递给方法。
解决方案
相反,尝试传递整个对象。
之前
int low = daysTempRange.getLow();int high = daysTempRange.getHigh();boolean withinPlan =计划。withinRange(低,高);
后
boolean withinPlan = plan.withinRange(daysTempRange);
之前
int low = daysTempRange.GetLow();int high = daysTempRange.GetHigh();bool withinPlan =计划。WithinRange(低,高);
后
bool withinPlan = plan.WithinRange(daysTempRange);
之前
$low = $daysTempRange->getLow();$high = $daysTempRange->getHigh();$withinPlan = $plan->withinRange($low, $high);
后
$withinPlan = $plan->withinRange($daysTempRange);
之前
low = daysTempRange.getLow() high = daysTempRange.getHigh() withinPlan =计划。withinRange(低,高)
后
withinPlan = plan.withinRange(daysTempRange)
之前
let low = daysTempRange.getLow();let high = daysTempRange.getHigh();let withinPlan =计划。withinRange(低,高);
后
let withinPlan = plan.withinRange(daysTempRange);
为什么重构
问题是,每次在调用方法之前,必须调用未来参数对象的方法。如果这些方法或为该方法获得的数据量发生了变化,您将需要仔细地在程序中找到十几个这样的地方,并在每个地方实现这些变化。
应用这种重构技术后,用于获取所有必要数据的代码将存储在一个地方——方法本身。
好处
您看到的不是参数的大杂烩,而是具有易于理解的名称的单个对象。
如果该方法需要来自对象的更多数据,则不需要重写使用该方法的所有位置—只需在方法本身内部重写即可。
缺点
- 有时,这种转换会导致方法变得不那么灵活:以前,方法可以从许多不同的来源获取数据,但现在,由于重构,我们将其限制为仅使用具有特定接口的对象。
如何重构
在方法中为对象创建一个参数,从中可以获得必要的值。
现在开始逐个从方法中删除旧的参数,将它们替换为对参数对象的相关方法的调用。在每次替换一个参数之后测试程序。
从方法调用之前的参数对象中删除getter代码。