上一次重构尝试好失败,不过学习还是要继续的,而且上次没学习的情况下搬移代码,易出错。这次我们学的是在对象之间搬移。学好了再尝试一下。
这一部分主要是关于将一部分代码搬进去,搬出去。提取新得类,吸收小的类。
搬移函数(Move Method)
有个函数与另一个类交互更多,最好搬移。另外我们后面很多其他的重构手法也会用到 Move Method。
其实操作不算复杂,首先需要检查源类的字段函数,如果只被打算搬移的函数用到,就一起搬移。如果被用到了,可以考虑一起搬移。 如果子类父类有相关引用,可能没法搬移。
这个举例子可以举个之前的例子,通过 多态替代 switch 语句,其实刚新建几个多态类的时候,就需要先将 switch 语句移出,然后将函数搬移到新的类。
搬移字段(move Field)
整个操作步骤相对复杂一点,移动字段到另一个类,需要保证能访问另一个类,然后分别修改引用的函数。
- 在源类封装源字段。
- 在新类添加新字段。
- 决定如何在原类添加到另一个类的引用对象。
- 删除原字段并将引用替换。
提炼类 (extract class)
这个我刚刚做的一个重构就有相应操作,我提炼了几个配置,并且移动字段方法。
- 建类,添加字段
- 添加旧类访问新类的关系。 注意,尽量不要添加新类到旧类的关系,除非真的需要。
- 使用 move field 、movie method。
- 决定是否公开类。
类 内联化 (Inline Class)
这个和 extract class 相反。
隐藏委托关系 (hide delegate)
就是通过中间类的方式,去掉太多类之间的联系。举的例子太简单了。
移除中间人(Remove Middle Man)
和 hide delegate 相反
引入外加函数(Introduce Foreign Method)
这个我主要是我们需要使用一个类的未实现功能,但是没法修改,只能在另一个类添加一个静态方法,第一个参数就是那个类。 方便以后可以移动到对应的类。
引入本地扩展 (Introduce Local Extension)
引入本地类,让他继承或者包装源类。
这个就类似 代理模式了。
总结
其实前两个用的最多,需要很熟悉。