重构二--在对象之间搬移特性(Move Method)(3)--作法

重构二--在对象之间搬移特性(Move Method)(3)--作法
作法(Mechanics)
    • 检查source class定义之source method所使用的一切特性(features),考虑它们是否也该被搬移。
        • ==》如果某个特性只被你打算搬移的那个函数用到,你应该将它一并搬移。如果另有其他函数使用了这个特性,你可以考虑将使用该特性的所有函数全部一并搬移。有时侯搬移一组函数比逐一搬移简单些。
    • 检查source class的subclass和superclass,看看是否有该函数的其他声明。
        • ==》如果出现其他声明,你或许无法进行搬移,除非target class也同样表现出多态性(polymorphism)。
    • 在target class中声明这个函数。
        • ==》你可以为此函数选择一个新名称 -- 对target class更有意义的名称。
    • 将source method的代码拷贝到target method中。调整后者,使其能在新家中正常运行。
        • ==》如果target method使用了source特性,你得决定如何从target method引用source object。如果target class中没有相应的引用机制,就把source object reference当作参数,转给新建立的target method。
        • ==》如果source method包含异常处理式(exception handler),你得判断逻辑上应该由哪个class来处理这一异常。如果应该由source class来负责,就把异常处理式留在原地。
    • 编译target class。
    • 决定如何从source正确引用target object。
        • ==》可能会有一个现成的值域或函数帮助你取得target object。如果没有,就看能否轻松建立一个这样的函数。如果还是不行,你得在source class中新建一个新值域来保存target object。这可能是一个永久性修改,但你也可以让它保持暂时的地位,因为后继的其他重构项目可能会把这个新建值域去掉。
    • 修改source method,使之成为一个delegating method(纯委托函数)。
    • 编译,测试。
    • 决定[删除source method]或将它当作一个delegating method保留下来。
        • ==》如果你经常要在source object中引用target method,那么将source method作为delegating method保留下来会比较简单。
    • 如果你移除source method,请将source class中对source method的所有引用动作,替换为[对target method的引用动作]。
        • ==》你可以每修改一个引用点就编译并测试一次。也可以通过一次[查找/替换]改掉所有引用点,这通常简单一些。
    • 编译,测试。

你可能感兴趣的:(重构二--在对象之间搬移特性(Move Method)(3)--作法)