无文档遗留系统的逆向梳理:利用 AI 重建架构视图

无文档遗留系统的逆向梳理:利用 AI 重建架构视图

接手老项目时,没文档、没注释,调用关系只能靠猜。点开几个文件,一路 Ctrl+Click 追下去,十几分钟 IDE 铺满Tab,越看越迷糊。

以前只能硬啃:翻代码、画草图,在脑子里拼结构,费时还容易陷进细节出不来。

现在可以直接把代码交给AI,让它帮你梳理模块边界、依赖关系和调用链,生成架构图,输出 Mermaid/PlantUML 代码。先看清全局,再决定往哪深入。

一个真实例子

假设你接手了一个 Spring Boot 的电商后端项目,代码结构大概是这样:

css 复制代码
src/main/java/com/example/shop/
├── ShopApplication.java           # 启动类
├── controller/
│   ├── UserController.java
│   ├── OrderController.java
│   └── PaymentController.java
├── service/
│   ├── UserService.java
│   ├── OrderService.java
│   └── PaymentService.java
├── repository/
│   ├── UserRepository.java
│   └── OrderRepository.java
└── entity/
    ├── User.java
    └── Order.java

你想快速搞清楚各个模块是怎么调用的。

把代码复制给 AI,用这样的 Prompt:

markdown 复制代码
帮我分析一下这些 Spring Boot 代码的调用关系,生成一个 Mermaid 架构图。

重点展示:
1. Controller 层如何调用 Service 层
2. Service 层之间的相互调用
3. Service 层如何调用 Repository 层
4. 用中文标注每个模块是干什么的

代码如下:
[把几个 Controller、Service、Repository 的代码贴进去]

然后 AI 会给你一段 Mermaid 代码:

graph TB A[客户端请求] -->|HTTP| B[Controller 层] B --> C1[UserController] B --> C2[OrderController] B --> C3[PaymentController] C1 --> S1[UserService] C2 --> S2[OrderService] C3 --> S3[PaymentService] S2 -->|查询用户| S1 S3 -->|验证用户| S1 S3 -->|更新订单| S2 S1 --> R1[UserRepository] S2 --> R2[OrderRepository] S3 --> R2 R1 --> D[(MySQL数据库)] R2 --> D style A fill:#e3f2fd style B fill:#fff3e0 style S1,S2,S3 fill:#e8f5e9 style R1,R2 fill:#f3e5f5 style D fill:#ffebee

你把这段代码贴到 mermaid.live,一张图就出来了。

那一刻,原本混乱的文件关系,突然清晰了。

不同场景用不同的图

架构这东西,不同的人想看不同的视角。

给产品经理看:时序图

产品想了解一个业务流程是怎么跑的?让 AI 画时序图:

arduino 复制代码
请生成一个时序图,展示 Spring Boot 应用中"用户下单"这个流程:
从 Controller 收到请求开始,到数据库保存成功的每一步调用

你会看到一条清晰的调用链:Controller → OrderService → 库存校验 → PaymentService → Repository → 数据库。

给新同事看:分层图

新人入职,需要快速了解项目分层?让 AI 画分层架构:

复制代码
请生成分层架构图,展示这个 Spring Boot 项目的分层:
Controller 层、Service 层、Repository 层,以及它们之间的关系

给自己看:依赖图

想排查有没有循环依赖?让 AI 画出模块依赖:

diff 复制代码
请生成依赖关系图,标注出:
- 哪些 Service 被多个模块依赖(核心服务)
- Service 之间是否存在循环依赖(用虚线标注警告)

几个实用建议

1. 不用把所有代码都给 AI

给太多了,AI 分析起来也累。挑核心文件就行:Application 启动类、主要的 Controller、Service、Repository。

2. 分模块画图

项目太大?别想着一张图包罗万象。先画整体概览,再针对核心业务模块画详细图。

3. 让 AI 用中文标注

默认生成的图可能是英文的,记得在 Prompt 里强调"用中文标注",好读很多。

4. 图要定期更新

代码在变,图也要跟着变。每次大改动后,让 AI 重新生成一张,几分钟的事。

也要说点实话

AI 生成的图不是完美的。

有些动态的依赖关系(比如通过反射、动态代理调用的),AI 看不出来。有时候它也会理解错,把不相关的类连在一起。

所以把它当作一个"快速理解工具",而不是"绝对真理"。

拿到的图,最好对照代码过一遍,有不对的地方手动改一改。

最后

图这东西,最重要的是"有用",而不是"好看"。

一张粗糙但准确的草图,比一张精美的空图要有价值得多。

AI 让我们低成本地获得这些草图。不用纠结格式,不用纠结美观,先把结构理清楚再说。

下次接手陌生项目,别急着翻代码,先让 AI 帮你画张图。

看着那张图,你会发现,原本复杂的项目,好像也没那么可怕了。

附:几个能用的 Prompt

分析这些 Spring Boot 代码的模块依赖关系,生成 Mermaid 架构图,用中文标注
生成时序图,展示用户下单流程的每一步调用(从 Controller 到 Repository)
这个项目的 Service 层有循环依赖吗?生成依赖图,标注出来
生成分层架构图,展示 Controller、Service、Repository 三层的关系

相关推荐
金銀銅鐵2 小时前
浅解 Junit 4 第六篇:AnnotatedBuilder 和 RunnerBuilder
后端·junit·单元测试
钟智强2 小时前
Erlang 从零写一个 HTTP REST API 服务
后端
王德印2 小时前
工作踩坑之导入数据库报错:Got a packet bigger than ‘max_allowed_packet‘ bytes
java·数据库·后端·mysql·云原生·运维开发
Cache技术分享2 小时前
327. Java Stream API - 实现 joining() 收集器:从简单到进阶
前端·后端
颜酱2 小时前
滑动窗口算法通关指南:从模板到实战,搞定LeetCode高频题
javascript·后端·算法
重生之后端学习2 小时前
994. 腐烂的橘子
java·开发语言·数据结构·后端·算法·深度优先
honeymoose3 小时前
Webjars 导入到 SpringBoot 项目
后端
何中应3 小时前
虚拟机内的系统无法解析外网域名
linux·运维·后端