代码分离到不同 类 [Java]
Separation of code to different classes [Java]
我有一个臃肿的 JDialog class(~2000 行),它显示两个不相关的 JTable。我想把它分成三个 classes(JDialog、Jtable1 和 JTable2)。我可以研究每个 table 使用了哪些变量和方法,并将它们移动到相关的 classes,但是这种手动重构会很乏味。
有什么方法可以自动进行这样的重构吗?
要实现这一点,脚本应该有一个令牌累加器。例如,第一个标记是来自 panel.add(jTable2) 的 jTable2
。现在检查其中包含 jTable2 的所有行并将标记添加到累加器。重复搜索相关的令牌,直到没有发现新的令牌。现在为每个标记找到包含它的行。扩大选择以包括括号。
很难相信这种可以说是最大的语言的程序员还没有创建这样的工具。这应该与 IDE.
中的查找用法工具非常相似
自动?不,谢天谢地。重构需要思考。深度学习还不存在。
大多数 IDE(例如 JetBrains 的 IntelliJ,市场上最好的 IDE)具有出色的重构支持。
但它不会为你着想。
一条建议:如果你有单元测试,你会更幸运,以小增量的方式进行,并使用版本控制系统。编写测试,进行更改,表明测试仍然通过,提交更改,重复。
您始终可以通过这种方式返回到上一个工作版本。不会比一步一步搞得一团糟。
我认为您可以做得更好:看看将侦听器和处理代码也移出 UI。 Swing 应用程序以大 类 结尾,因为人们学会了将所有内容塞入 UI 类。如果你分解它,你会发现代码更容易阅读,更模块化,更容易单元测试。
在 NetBeans 中,您可以使用 Refactor->move。它会启动一个向导,方便地显示相关方法。您需要 select 他们要移动,但您不必在代码中寻找。其他 IDE 具有类似的功能。
这样你仍然需要思考,但找到它们的无聊部分由 IDE 为你完成。
看看提出类似问题的 post (How to refactor thousands of lines of Java code? Is there any tool available?)。
基本上,有一些生产质量工具可以帮助您提取 类,一旦您知道要放入 类 的内容。值得注意的是,IntelliJ 的 IDEA 具有很好的 "extract class" 重构。
更难的部分是确定那些 类 中应该包含哪些内容。 AFAIK,只有研究工具可用。
我有一个臃肿的 JDialog class(~2000 行),它显示两个不相关的 JTable。我想把它分成三个 classes(JDialog、Jtable1 和 JTable2)。我可以研究每个 table 使用了哪些变量和方法,并将它们移动到相关的 classes,但是这种手动重构会很乏味。
有什么方法可以自动进行这样的重构吗?
要实现这一点,脚本应该有一个令牌累加器。例如,第一个标记是来自 panel.add(jTable2) 的 jTable2
。现在检查其中包含 jTable2 的所有行并将标记添加到累加器。重复搜索相关的令牌,直到没有发现新的令牌。现在为每个标记找到包含它的行。扩大选择以包括括号。
很难相信这种可以说是最大的语言的程序员还没有创建这样的工具。这应该与 IDE.
中的查找用法工具非常相似自动?不,谢天谢地。重构需要思考。深度学习还不存在。
大多数 IDE(例如 JetBrains 的 IntelliJ,市场上最好的 IDE)具有出色的重构支持。
但它不会为你着想。
一条建议:如果你有单元测试,你会更幸运,以小增量的方式进行,并使用版本控制系统。编写测试,进行更改,表明测试仍然通过,提交更改,重复。
您始终可以通过这种方式返回到上一个工作版本。不会比一步一步搞得一团糟。
我认为您可以做得更好:看看将侦听器和处理代码也移出 UI。 Swing 应用程序以大 类 结尾,因为人们学会了将所有内容塞入 UI 类。如果你分解它,你会发现代码更容易阅读,更模块化,更容易单元测试。
在 NetBeans 中,您可以使用 Refactor->move。它会启动一个向导,方便地显示相关方法。您需要 select 他们要移动,但您不必在代码中寻找。其他 IDE 具有类似的功能。
这样你仍然需要思考,但找到它们的无聊部分由 IDE 为你完成。
看看提出类似问题的 post (How to refactor thousands of lines of Java code? Is there any tool available?)。
基本上,有一些生产质量工具可以帮助您提取 类,一旦您知道要放入 类 的内容。值得注意的是,IntelliJ 的 IDEA 具有很好的 "extract class" 重构。
更难的部分是确定那些 类 中应该包含哪些内容。 AFAIK,只有研究工具可用。