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

相关推荐
程序猿DD14 分钟前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
余槐i3 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8263 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
凤山老林4 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne5 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF5 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
pride.li6 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
upala6 小时前
【仓颉语言入门 · 第二篇 第 6 课】
后端
罗丹丹Luna6 小时前
移动端显示“已提交”以后:SAP 与低代码集成该怎样暴露真实状态
后端·架构
码事漫谈6 小时前
因为太想讨好你,所以AI会骗你
后端