java - 单体应用的自动重构
问题描述
我们有一个相当大的单体软件,我们想在更大的范围内重构。第一步是导出几个可以独立编译的人工制品。鉴于应用程序的大小,我们希望尽可能地自动化。
一个例子:
+ package1
| |
| + Service1
|
+ package2
| |
| + Service2
|
+ interfacepackage
假设,Service1
仅在内部使用package1
,则不应触及。假设Service2
从Service1
我想自动生成一个最小接口Service2
,将该接口放入包中interfacepackage
并将依赖关系更改Service1
为接口。
手动执行此操作完全没有问题。Idea 和 Eclipse 都提供半自动重构,但我们希望将它们表述为元规则。我曾希望 eclipse 或 intellij 有一个编程接口来定义这些规则,但我还没有找到它们。
我什至找到了 eclipse 重构脚本,但这些似乎仅限于重构命名类,所以如果我知道所有应该重构的服务,eclipse 重构脚本会有所帮助,但如果我想定义要重构的类的条件,则不会。
我应该在哪里寻找解决方案?
澄清: 评论:那你的问题是什么?
我们拥有高 3 位数的服务,这些服务构成了这个整体。这些是大约。20 种不同的包装。整个软件接近 100 万行代码。我的问题只是尺寸。手动进行重构可能需要几个月的时间,我们可能会错过手动进行的一些事情。此外,梳理服务只是第一步。因此,我们期待在未来应用许多类似的重构。
解决方案
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 上查看我自己的插件,我在其中发布了源代码。
推荐阅读
- datastage - 如何在 ibm datastage 中更新数据库
- linux - 使用 bash 打印每行的最后 n 个字符
- database - 如何使用 Liquibase 处理多个模式
- flutter - 是什么意思 ”!。” 在飞镖?“!”的等效代码是什么?? -扑
- java - 为什么这个 4 字节的十六进制数不能转换成 int?
- airflow - 如何在以编程方式触发 dag 时跳过任务
- mysql - 将主键转换为mysql中的唯一键
- python - 十六进制字符串列表到十六进制文字
- python - Django ImportError:使用 Docker 时无法导入 Django
- flutter - 单选按钮不会更改 Flutter 中的选择