首页 > 解决方案 > 单体应用的自动重构

问题描述

我们有一个相当大的单体软件,我们想在更大的范围内重构。第一步是导出几个可以独立编译的人工制品。鉴于应用程序的大小,我们希望尽可能地自动化。

一个例子:

+ package1
|    |
|    + Service1
|
+ package2
|    |
|    + Service2
|
+ interfacepackage

假设,Service1仅在内部使用package1,则不应触及。假设Service2Service1我想自动生成一个最小接口Service2,将该接口放入包中interfacepackage并将依赖关系更改Service1为接口。

手动执行此操作完全没有问题。Idea 和 Eclipse 都提供半自动重构,但我们希望将它们表述为元规则。我曾希望 eclipse 或 intellij 有一个编程接口来定义这些规则,但我还没有找到它们。

我什至找到了 eclipse 重构脚本,但这些似乎仅限于重构命名类,所以如果我知道所有应该重构的服务,eclipse 重构脚本会有所帮助,但如果我想定义要重构的类的条件,则不会。

我应该在哪里寻找解决方案?

澄清: 评论:那你的问题是什么?

我们拥有高 3 位数的服务,这些服务构成了这个整体。这些是大约。20 种不同的包装。整个软件接近 100 万行代码。我的问题只是尺寸。手动进行重构可能需要几个月的时间,我们可能会错过手动进行的一些事情。此外,梳理服务只是第一步。因此,我们期待在未来应用许多类似的重构。

标签: javaeclipseintellij-ideaautomated-refactoring

解决方案


IntelliJ IDEA 有一个“开放 api”,可用于插件开发。

优点是 IntelliJ 解析 java 代码,“元模型”可供插件作者使用。

在 IntelliJ 中,“AST”模型指的是“抽象语法树”。这种结构对于进行重构的插件来说是无价的。

您可以轻松查看包结构、类名、代码等。

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


推荐阅读