Monolith 的自动重构
Automatic Refactoring of Monolith
我们有一个相当大的单体软件,我们想在更大的范围内进行重构。第一步是派生出几个可以独立编译的工件。鉴于应用程序的大小,我们希望尽可能自动化。
一个例子:
+ package1
| |
| + Service1
|
+ package2
| |
| + Service2
|
+ interfacepackage
假设,Service1
仅在 package1
中使用,不应触及。假设从 Service1
使用 Service2
我想为 Service2
自动生成一个最小接口,将该接口放在包 interfacepackage
中并更改 [=11= 内的依赖关系]到界面。
手动执行此操作一点也不麻烦。 Idea 和 Eclipse 都提供半自动重构,但我们希望将它们制定为元规则。我曾希望 eclipse 或 intellij 有一个编程接口来定义这些规则,但我还没有找到它们。
我什至找到了 eclipse 重构脚本,但这些似乎仅限于命名 类 的重构,所以如果我知道所有应该重构的服务,eclipse 重构脚本会有所帮助,但如果我不想的话定义要重构的 类 条件。
我应该在哪里寻找解决方案?
澄清:评论:那你的问题是什么?
我们有高达 3 位数的服务构成了这个整体。这些大约是。 20 种不同的包装。整个软件接近100万行代码。我的问题只是大小。手动进行重构可能需要几个月的时间,我们可能会错过一些手动进行的事情。此外,消除服务的纠缠只是第一步。所以我们期待在未来应用很多类似的重构。
IntelliJ IDEA 有一个"open api"可以用于插件开发。
优点是IntelliJ解析java代码,"meta model"插件作者可以使用
在 IntelliJ 中,"AST" 模型指的是 "Abstract Syntax Tree"。这种结构对于进行重构的插件来说是无价的。
您可以轻松查看包结构、class名称、代码等。
https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started.html
注意! Java 插件开发功能已作为插件外部化。
https://blog.jetbrains.com/platform/2019/06/java-functionality-extracted-as-a-plugin/
也请在 github 上查看我自己的插件,我已经在其中发布了源代码。
我们有一个相当大的单体软件,我们想在更大的范围内进行重构。第一步是派生出几个可以独立编译的工件。鉴于应用程序的大小,我们希望尽可能自动化。
一个例子:
+ package1
| |
| + Service1
|
+ package2
| |
| + Service2
|
+ interfacepackage
假设,Service1
仅在 package1
中使用,不应触及。假设从 Service1
使用 Service2
我想为 Service2
自动生成一个最小接口,将该接口放在包 interfacepackage
中并更改 [=11= 内的依赖关系]到界面。
手动执行此操作一点也不麻烦。 Idea 和 Eclipse 都提供半自动重构,但我们希望将它们制定为元规则。我曾希望 eclipse 或 intellij 有一个编程接口来定义这些规则,但我还没有找到它们。
我什至找到了 eclipse 重构脚本,但这些似乎仅限于命名 类 的重构,所以如果我知道所有应该重构的服务,eclipse 重构脚本会有所帮助,但如果我不想的话定义要重构的 类 条件。
我应该在哪里寻找解决方案?
澄清:评论:那你的问题是什么?
我们有高达 3 位数的服务构成了这个整体。这些大约是。 20 种不同的包装。整个软件接近100万行代码。我的问题只是大小。手动进行重构可能需要几个月的时间,我们可能会错过一些手动进行的事情。此外,消除服务的纠缠只是第一步。所以我们期待在未来应用很多类似的重构。
IntelliJ IDEA 有一个"open api"可以用于插件开发。
优点是IntelliJ解析java代码,"meta model"插件作者可以使用
在 IntelliJ 中,"AST" 模型指的是 "Abstract Syntax Tree"。这种结构对于进行重构的插件来说是无价的。
您可以轻松查看包结构、class名称、代码等。
https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started.html
注意! Java 插件开发功能已作为插件外部化。
https://blog.jetbrains.com/platform/2019/06/java-functionality-extracted-as-a-plugin/
也请在 github 上查看我自己的插件,我已经在其中发布了源代码。