重读《重构 2》- 搬移函数
8.1 搬移函数(Move Function)
搬移函数最直接的一个动因是,它频繁引用其他上下文中的元素,而对自身上下文中的元素却关心甚少。此时,让它去与那些更亲密的元素相会, 通常能取得更好的封装效果,因为系统别处就可以减少对当前模块的依赖。
造成这样的一个主要原因是:我们对模块设计的理解并不是一成不变的,随着对代码的理解加深,我会知道那些软件要素如何组织最为恰当。
这样说可能抽象了些,我自己的习惯是当代码被动修改时,考虑搬移函数,让代码能灵活使用新的修改。
即当需求变动,如增加功能、修改功能时,原有代码就会被动修改,这时原有代码就会被拆分成最少 2 块:要增加、修改的部分和不变的部分。
接下来再看,新增、修改的功能,在当前函数上下文中的关系,最少可以分为 3 种:
和上下文中的其他功能是平级的,只需在合适的位置插入代码即可;
属于上下文中某个功能的子功能,在子功能函数中修改即可,如果子功能没有封装成函数,则封装出来,并保证调用的上下文保持不变;
包含了不属于上下文的功能,此时要到当前上下文的调用处来做修改,保证当前上下文的函数不做修改,在调用处新增函数或增加判断逻辑来修改。
还有一种情况就是主动修改,即随着软件上线后并经过验证,稳定性得到了保证,同时需求也稳定了,可以考虑在代码可维护、同类功能开发效率上进行重构。如实现配置化开发。
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/7e4fafedd66e0af59b1a7dcc5】。文章转载请联系作者。
评论