重构。当代码仅相差一行时,复制粘贴代码

时间:2016-05-10 18:43:29

标签: java web-applications refactoring legacy

我有一个名为FirstClass的类,它有一个超过100行的方法。现在我正在编写一个名为SecondClass的新类,它的方法与FirstClass中除一行之外的方法完全相同。

我可以复制firstMethod()的内容并将其粘贴到secondMethod()中,然后更改不同的行。但这对我来说似乎并不合适。

如何在不复制/粘贴代码的情况下处理这种情况?

无法更改FirstClass。

public class FirstClass {
    public void firstMethod() {
        //100 lines of code
    }
}

public class SecondClass {
    public void secondMethod() {
        // Copy/paste the content of firstMethod() from above?
    }
}

3 个答案:

答案 0 :(得分:1)

使用带有公共代码的抽象类并对其进行扩展,然后通过调用super方法并执行不同的代码来覆盖方法:

public class CommonClass {
    public void method() {
        // 100 lines of code
    }
}

public class FirstClass extends CommonClass {
    public void method() {
        super.method();
        // other code
    }
}

public class SecondClass extends CommonClass {
    public method() {
        super.method();
        // other code
    }
}

答案 1 :(得分:1)

我认为在这种情况下你最好的选择是decoratorHere您可以看到基于Java的实现。

public class SecondClass extends FirstClass {
    private FirstClass firstClass;

    ...

    @Override 
    void firstMethod() {
        // do something before
        firstClass.firstMethod();
        // do something after
    }

但是单个方法中的100行代码似乎不适合我。

答案 2 :(得分:1)

  

无法更改FirstClass。

这个要求非常有限。如果你根本无法改变第一种方法,那么我只能看到两种可能性。

第一种可能性取决于第一种方法实际上做了什么,以及第二种方法应该做什么。如果你很幸运,也许你可以编写第二种方法,以便它;

  • 可能会设置一些特殊条件或特殊环境,
  • 以某种特殊的方式调用第一种方法,
  • 也许以某种方式修复结果。

如果你无法做到这一点,那么我能看到的唯一其他可能性就是剪切/复制/粘贴/编辑,然后去洗手。