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 上查看我自己的插件,我已经在其中发布了源代码。

https://github.com/Steve-Murphy/unencapsulate-plugin