无文档遗留系统的逆向梳理:利用 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 三层的关系

相关推荐
玖玖passion13 小时前
Windows 上部署 Hermes Agent 完整指南 - 让你的 AI 助手在 WSL2 中跑起来
前端·后端·github
Undoom14 小时前
【腾讯位置服务开发者征文大赛】基于YOLOv8与腾讯地图的视障辅助Android应用——从模型训练到端侧部署全链路实践
后端
ltl14 小时前
【大模型基础设施工程】03:CUDA 生态——cuBLAS、cuDNN、NCCL、Triton、CUTLASS
后端
wan_jm14 小时前
Go Web 开发提速 3(gos):Filter 实战与变量注入 —— 通用逻辑复用与依赖解耦
后端
rannn_11114 小时前
【Redis|原理篇2】Redis网络模型、通信协议、内存回收
java·网络·redis·后端·缓存
RDCJM15 小时前
Springboot的jak安装与配置教程
java·spring boot·后端
_Evan_Yao15 小时前
对话的边界:HTTP 的克制,SSE 的流淌,WebSocket 的自由
java·后端·websocket·网络协议·http
危桥带雨16 小时前
FLASH代码部分
java·后端·spring
Rust研习社16 小时前
添加依赖库时的 features 是什么?优雅实现编译期条件编译与模块化开发
开发语言·后端·rust