gpt4 book ai didi

java - 复杂的重构

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:18 25 4
gpt4 key购买 nike

是否有任何好的 Java 重构工具可以处理如下所示的大型重构项目。显然,如果可能的话,我更愿意免费。

我正在处理一个遗留项目,其中大部分是在 Java 早期构建的。有许多甚至数百个类使用旧式命令处理模式,例如:

public interface IFrom {
public static final String COMMAND1 = "Command1";
public static final String COMMAND2 = "Command2";
}

public class From {
public void doSomething(String command) {
if (command.equals(IFrom.COMMAND1)) {
doSomething1();
} else if (command.equals(IFrom.COMMAND2)) {
doSomething2();
}
}

private void doSomething1() {
System.out.println("Something-1");
}

private void doSomething2() {
System.out.println("Something-2");
}
}

变成更易于管理的东西,例如:

interface DoSomething {
public void doSomething();
}

enum ToCommands implements DoSomething {
Command1 {
@Override
public void doSomething() {
System.out.println("Something-1");
}
},
Command2 {
@Override
public void doSomething() {
System.out.println("Something-2");
}
};
}

public class To {
public void doSomething(String command) {
ToCommands.valueOf(command).doSomething();
}
}

我可能会补充说,不仅可能有数百个类遵循这种模式,而且其中一些类还实现了数百个命令。

最佳答案

大规模重构通常包括自定义转换,例如,对不易表示为经典重构操作组合的代码的更改。如果是,那么使用交互式工具很难做到这一点;从本质上讲,您通过鼠标进行了数百次更改,作为一个可重复的过程是不可靠的。

最后,弄清楚所需的操作链很困难;您不想手动执行此操作并且弄错了。在尝试生产应用程序之前,您需要能够机械地应用更改并通过多次试验验证结果。

您很可能想使用可编程的重构工具。对于大量更改,您可能需要考虑使用 program transformation tools .此类工具允许您将程序转换编写为模式导向的重写规则,例如,“如果您看到这段代码,请将其替换为那段代码”;通常这样的重写也允许模式变量。这些不是字符串替换;相反,它们与程序结构(例如,解析树)相匹配,并且可以与更复杂的系统一起包含有关符号类型以及信息来自或去向(数据流)的信息。因为它们匹配程序结构并且可以使用深度语义分析,所以它们可以进行可靠的更改。在过去的 20 年中,程序转换工具已被用于对代码库进行大量更改。 (如果您想查看我认为通常能够处理复杂重构任务的特定程序转换工具,请参阅我的简历)。

您会听说“基于模型”的转换。通常这意味着“将您的代码转换为 UML 类模型,然后再转换它们”。这种方法通常会丢失代码本身的细节,这就是为什么对代码进行操作的程序转换方法在大规模更改时更成功。

关于java - 复杂的重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16281350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com