上一次重构尝试好失败,不过学习还是要继续的,而且上次没学习的情况下搬移代码,易出错。这次我们学的是在对象之间搬移。学好了再尝试一下。

这一部分主要是关于将一部分代码搬进去,搬出去。提取新得类,吸收小的类。

搬移函数(Move Method)

有个函数与另一个类交互更多,最好搬移。另外我们后面很多其他的重构手法也会用到 Move Method。

其实操作不算复杂,首先需要检查源类的字段函数,如果只被打算搬移的函数用到,就一起搬移。如果被用到了,可以考虑一起搬移。 如果子类父类有相关引用,可能没法搬移。

这个举例子可以举个之前的例子,通过 多态替代 switch 语句,其实刚新建几个多态类的时候,就需要先将 switch 语句移出,然后将函数搬移到新的类。

搬移字段(move Field)

整个操作步骤相对复杂一点,移动字段到另一个类,需要保证能访问另一个类,然后分别修改引用的函数。

  1. 在源类封装源字段。
  2. 在新类添加新字段。
  3. 决定如何在原类添加到另一个类的引用对象。
  4. 删除原字段并将引用替换。

提炼类 (extract class)

这个我刚刚做的一个重构就有相应操作,我提炼了几个配置,并且移动字段方法。

  1. 建类,添加字段
  2. 添加旧类访问新类的关系。 注意,尽量不要添加新类到旧类的关系,除非真的需要。
  3. 使用 move field 、movie method。
  4. 决定是否公开类。

类 内联化 (Inline Class)

这个和 extract class 相反。

隐藏委托关系 (hide delegate)

就是通过中间类的方式,去掉太多类之间的联系。举的例子太简单了。

移除中间人(Remove Middle Man)

和 hide delegate 相反

引入外加函数(Introduce Foreign Method)

这个我主要是我们需要使用一个类的未实现功能,但是没法修改,只能在另一个类添加一个静态方法,第一个参数就是那个类。 方便以后可以移动到对应的类。

引入本地扩展 (Introduce Local Extension)

引入本地类,让他继承或者包装源类。

这个就类似 代理模式了。

总结

其实前两个用的最多,需要很熟悉。