重构改善既有代码设计--保持对象完整

保持对象完整

动机

有时候,你会将来自同一对象的若干项数据作为参数,传递给某个函数
存在的问题:
万一将来被调用函数需要新 的数据项,你就必须查找并修改对此函数的所有调用。
解决办法:
把这些数据所属的整个对象传给函数,会提高代码的可读性,降低重复代码。但参数对象和被调用函数所在的对象之间,就有了依存关系。如果被调用函数使用了来自另外一个对象的许多项数据,应该将整个方法移到另外一个对象中。

做法

  • 对函数新添一个表示完整数据项的完整对象参数项
  • 编译测试
  • 判断哪些参数包含在对象中
  • 对该参数,将被调用函数 内对该参数的各个引用,替换为对参数对象对象取值函数的调用
  • 删除该项参数
  • 编译、测试
  • 对所有「可从完整对象中获得」的参数替换
  • 删除调用端中那些带有「被删除之参数」的所有代码

范例

class Room ...
	boolean withinPlan(HeatingPlan plan) {
		int low = daysTempRange().getLow(); // 将其封装进了TempRange类中
		int hight = daysTempRange().getHigh();
		return plan.withinRange(low, high);
	}
class HeatingPlan ...
	private TempRange _range;
	boolean withinRange (int low, int high) {
		return (low >= _range.getLow() && high <= _range.getHigh());
	}
}
===========================================>
class TempRange ...
	boolean includes (TempRange roomRange) {
		return (roomRange.getLow() >= _range.getLow()&&roomRange.getHigh() <= _range.getHigh());
	}
class HeatingPlan...
	private TempRange _range;
	boolean withinRange(TempRange roomRange){
		return (_range.includes(roomRange));
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值