Move Method(搬移函数)

动机

“搬移函数”是重构理论的支柱。如果一个类有太多行为,或如果一个类与另一个类有太多合作而形成高度耦合,我就会搬移函数。通过这样的手段,可以使系统中的类更简单,这些类最后也将更干净利落地实现系统交付的任务。

做法

  1. 检查源类中被源函数所使用的一切特性(包括字段和函数),考虑它们是否也该搬移(如果某个特性只被你打算搬移的那个函数用到,就应该将它一并搬移。如果另有其他函数使用了这个特性,你可以考虑将使用该特性的所有函数一起搬移。有时候,搬移一组函数比逐一搬移简单些)。
  2. 检查源类的子类和超类,看看是否有该函数的其他声明(如果出现其他声明,你或许无法进行搬移,除非目标类也同样表现出多态性)。
  3. 在目标类中声明这个函数(你可以为此函数选择一个新名字——对目标类更有意义的名称)。
  4. 将源函数的代码复制到目标函数中。调整后者,使其能在新家中正常运行(如果目标函数使用了源类中的特性,你得决定如何从目标函数引用源对象,如果目标类中没有相应的引用机制,就把源对象的引用当作参数,传给新建立的目标函数;如果源函数包含异常处理,你得判断逻辑上应该由哪个类来处理这一异常。如果应该由源类来负责,就把异常处理留在原地)。
  5. 编译目标类
  6. 决定如何从源函数正确引用目标对象(可能会有一个现成的字段或函数帮助你取得目标函数。如果没有,就看能否轻松建立一个这样的函数。如果还是不行,就得在源类中新建一个字段来保存目标对象。这可能使一个永久性修改,但你也可以让它是暂时的,因为后继的其他重构项目可能会把这个新建字段去掉)。
  7. 修改源函数,使之成为一个纯委托函数。
  8. 编译,测试。
  9. 决定是否删除源函数,或将它当作一个委托函数保留下来(如果你经常要在源对象中引用目标函数,那么将源函数作为委托函数保留下来会比较简单)。
  10. 如果要移除源函数,请将源类中对源函数的所有调用,替换为对目标函数的调用(你可以没修改一个引用点就编译并测试一次,也可以通过一次“查找/替换"改掉所有引用点,这通常简单一些)。
  11. 编译,测试。

范例

class Account...
	double overdraftCharge() {
   
		if (_type.isPremium()) {
   
			double result = 10;
			if (_daysOverdrawn 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值