无文档遗留系统的逆向梳理:利用 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 代码:
你把这段代码贴到 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 三层的关系