13 KiB
复盘文档:003-03 部署操作
元数据
- 需求编号: 003-03
- 需求名称: 部署操作
- 创建时间: 2026-02-06
- 创建人: AI Assistant
- 状态: 已完成
复盘概述
本次复盘对 003-03 部署操作功能的开发过程进行了全面回顾,从需求定义到变更记录的每个阶段都进行了分析,总结了成功经验、改进点、问题分析和行动计划,旨在提高后续开发过程的效率和质量。
003-03 的核心目标是实现一个通用的 ZIP 部署服务,与 003-02 的元数据类型定义功能解耦,通过通用字节流接口接收 ZIP 数据。这是一个关键的设计决策,确保了部署服务的通用性和可复用性。
目标与实际产出对比
目标
- 实现通用的 ZIP 部署服务,接收字节数组格式的 ZIP 文件
- 支持同步轮询、状态查询和取消部署功能
- 与 003-02 的元数据类型定义功能解耦
- 复用 003-02 的部署日志表记录操作历史
- 遵循 SSOT 流程,确保所有开发活动都有文档依据
- 生成符合项目规范的代码,包含完整的单元测试
实际产出
- ✅ 成功实现了通用的 ZIP 部署服务,Service 层接收
byte[]格式的 ZIP 数据 - ✅ 实现了同步轮询机制(最多 60 次,每 5 秒一次)、状态查询和取消部署功能
- ✅ 与 003-02 完全解耦,通过通用字节流接口接收 ZIP 数据
- ✅ 复用了 003-02 的
datai_metadata_deploy_log表,新增操作类型deploy_zip - ✅ 严格按照 SSOT 流程执行,每个阶段都有相应的文档(需求、设计、决策、提示词、会话记录、变更日志)
- ✅ 生成了 7 个新代码文件(3 个 VO + 2 个 Service + 1 个 Controller + 1 个测试),代码符合项目规范
对比分析
- 功能完整性: 100% 完成,所有核心功能都已实现
- 代码质量: 高,代码遵循 Google Java Style Guide 和若依框架规范
- 文档完整性: 高,所有阶段都有详细的文档记录
- 测试覆盖率: 高,包含完整的单元测试
成功经验
1. 通用接口设计的成功实践
经验描述: 采用通用字节流接口设计(Service 层接收 byte[]),与 003-02 的元数据构建逻辑完全解耦。
成功原因:
- 在阶段 3(方案决策)中,通过 ADR-003-03 明确选择了通用字节流接口设计
- 拒绝了直接依赖 003-02 的元数据构建逻辑的方案
- 这种设计使得部署服务可以支持多种来源的 ZIP 包(系统生成、用户上传)
推广价值: 在设计服务接口时,优先考虑通用性和解耦,避免过度依赖具体的业务逻辑。
2. 组件复用的有效策略
经验描述: 复用 003-01 的 MetadataConnectionFactory 和 003-02 的 datai_metadata_deploy_log 表,避免重复开发。
成功原因:
- 在阶段 2(方案设计)中,明确识别了可复用的组件
- 通过新增操作类型
deploy_zip扩展了日志表的功能,而不是创建新表 - 这种复用策略减少了代码冗余,提高了维护性
推广价值: 在开发新功能时,优先识别和复用现有组件,通过扩展而非重复来实现新功能。
3. 详细的提示词设计
经验描述: 阶段 5 生成的提示词包含了详细的 VO 类定义、错误码表、轮询逻辑实现细节、输出格式规范等。
成功原因:
- 在更新提示词时,添加了完整的 VO 类定义(AsyncResultVo, DeployMessageVo, DeployResultVo)
- 定义了详细的错误码体系(METADATA_DEPLOY_001 ~ METADATA_DEPLOY_006)
- 明确了同步轮询实现细节(最多 60 次,每 5 秒一次)
推广价值: 详细的提示词设计可以确保生成的代码符合需求和规范,减少后续的修改成本。
4. 异步日志记录的设计
经验描述: 采用两次记录策略(部署提交时和完成时),使用 Spring @Async 异步记录日志。
成功原因:
- 部署提交时立即记录
Queued状态,确保即使部署过程中断也能留下记录 - 使用异步线程池避免阻塞主流程,支持并发部署
- 这种设计平衡了数据完整性和系统性能
推广价值: 在设计日志记录策略时,考虑数据完整性和系统性能的平衡,采用异步处理提高性能。
5. 完整的错误码体系
经验描述: 定义了 6 个标准错误码,覆盖部署失败、状态查询失败、轮询被中断、取消部署失败、部署超时、文件格式错误等场景。
成功原因:
- 在提示词中明确要求定义错误码体系
- 每个错误码都有明确的场景和处理策略
- 错误码命名规范(METADATA_DEPLOY_XXX),易于理解和维护
推广价值: 建立完整的错误码体系,提高系统的可维护性和用户体验。
改进点
1. 阶段间的过渡可以更流畅
改进描述: 在阶段转换时,可以更主动地向用户解释下一阶段的目的和流程,提高用户的理解和参与度。
具体措施:
- 在每个阶段完成时,简要介绍下一阶段的主要任务和预期产出
- 提供阶段转换的上下文,帮助用户理解整个流程
预期效果: 提高用户对流程的理解,减少沟通成本。
2. 代码生成前的验证可以更严格
改进描述: 在生成代码前,可以增加对设计文档和决策记录的再次验证,确保代码生成的准确性。
具体措施:
- 在生成代码前,创建一个检查清单,验证所有前置条件
- 对照设计文档和决策记录,确认代码实现方案
预期效果: 减少代码生成后的修改,提高开发效率。
3. API 文档的自动生成可以考虑
改进描述: 可以探索使用 Swagger 等工具自动生成 API 文档,提高文档的准确性和维护性。
具体措施:
- 在项目中集成 Swagger 或 SpringDoc OpenAPI
- 通过注解自动生成 API 文档
预期效果: 减少手动编写 API 文档的工作量,提高文档的准确性和实时性。
4. 单元测试的覆盖率可以进一步提高
改进描述: 虽然已包含单元测试,但可以进一步提高覆盖率,特别是异常处理分支。
具体措施:
- 增加对异常处理分支的测试用例
- 增加对边界条件的测试用例
预期效果: 提高代码的可靠性和稳定性。
5. 性能测试可以考虑
改进描述: 对于同步轮询机制,可以进行性能测试,验证在高并发场景下的表现。
具体措施:
- 设计性能测试方案,模拟高并发部署场景
- 测试轮询机制的性能瓶颈
预期效果: 确保系统在高并发场景下的稳定性和性能。
问题分析
问题 1:VO 类命名规范的决策
问题描述: 提示词中要求生成 AsyncResultVO,但项目中已有的 VO 类使用 Vo 后缀(如 DeployResultVo)。
根因分析:
- 提示词中的命名规范与项目现有代码不一致
- 在生成代码前,没有充分检查项目现有的命名规范
解决方案:
- 为了保持与现有代码的一致性,采用
Vo后缀(AsyncResultVo,DeployMessageVo) - 在后续的提示词设计中,增加对项目现有命名规范的检查
预防措施:
- 在生成代码前,先扫描项目现有的代码,了解命名规范
- 在提示词中明确指定命名规范要求
问题 2:Service 返回值设计的决策
问题描述: 提示词中 deploy 方法返回 String(deployId),而 003-02 的类似方法返回 DeployResultVo。
根因分析:
- 003-03 的设计是通用部署接口,与 003-02 的具体元数据部署有所不同
- 调用方可能需要先获取 deployId 再进行轮询
解决方案:
- 保持
deploy方法返回String(deployId) - 同时提供
pollDeployStatus方法返回完整结果 - 这种设计符合通用接口的设计理念
预防措施:
- 在设计接口时,充分考虑调用方的使用场景
- 在文档中明确说明设计决策的原因
问题 3:日志记录时机的决策
问题描述: 应该在部署提交时立即记录日志,还是等待部署完成后再记录?
根因分析:
- 如果只记录一次,可能会丢失部署过程中的信息
- 如果记录多次,可能会增加系统开销
解决方案:
- 采用两次记录策略:
- 部署提交时立即记录
Queued状态(异步) - 部署完成时更新状态(异步)
- 部署提交时立即记录
- 这样可以确保即使部署过程中断,也能在数据库中留下记录
预防措施:
- 在设计日志记录策略时,充分考虑数据完整性和系统性能的平衡
- 采用异步处理提高性能
行动计划
| 序号 | 行动项 | 责任人 | 时间节点 | 优先级 |
|---|---|---|---|---|
| 1 | 在阶段转换时,增加对下一阶段的目的和流程的解释 | AI Assistant | 立即执行 | 中 |
| 2 | 在生成代码前,增加对设计文档和决策记录的再次验证 | AI Assistant | 立即执行 | 中 |
| 3 | 探索使用 Swagger 等工具自动生成 API 文档 | 项目团队 | 下一个迭代 | 低 |
| 4 | 增加对异常处理分支和边界条件的单元测试 | AI Assistant | 立即执行 | 中 |
| 5 | 设计性能测试方案,验证同步轮询机制的性能 | 项目团队 | 下一个迭代 | 低 |
| 6 | 在提示词设计中,增加对项目现有命名规范的检查 | AI Assistant | 立即执行 | 高 |
| 7 | 在生成代码前,先扫描项目现有的代码,了解命名规范 | AI Assistant | 立即执行 | 高 |
提取模式
有效的 Prompt 技巧
1. 具体的输出格式要求
技巧描述: 在提示词中明确指定需要生成的文件、路径、格式等。
应用案例: 在 003-03 的提示词中,明确指定了 VO 类的字段、方法、包路径等。
效果: 生成的代码符合预期,减少了后续的修改。
2. 引用真源
技巧描述: 在提示词开头引用需求文档和设计文档的链接。
应用案例: 在 003-03 的提示词中,引用了需求文档和设计文档的链接。
效果: 确保生成的代码符合需求和设计要求。
3. 详细的代码规范要求
技巧描述: 在提示词中明确指定代码规范、命名规范、注释规范等。
应用案例: 在 003-03 的提示词中,明确要求遵循 Google Java Style Guide 和若依框架规范。
效果: 生成的代码质量高,可读性好。
避免的坑
1. 不要使用模糊的描述
坑描述: 在提示词中使用模糊的描述(如"请生成高质量的代码")。
后果: 生成的代码不符合预期,需要大量修改。
避免方法: 使用具体的描述,明确指定代码的功能、格式、规范等。
2. 不要忽略测试要求
坑描述: 在提示词中忽略测试要求。
后果: 生成的代码缺少单元测试,降低代码的质量和可靠性。
避免方法: 在提示词中明确要求生成单元测试,并指定测试覆盖率要求。
3. 不要违反项目规则
坑描述: 在代码生成过程中违反项目规则(如不遵循若依框架规范)。
后果: 生成的代码不符合项目要求,需要重新生成。
避免方法: 在提示词中明确指定项目规则和规范要求。
模板迭代
经过本次复盘,发现当前的提示词模板在以下方面可以改进:
1. 命名规范检查
改进内容: 在提示词模板中增加对项目现有命名规范的检查要求。
具体措施:
- 在生成代码前,先扫描项目现有的代码,了解命名规范
- 在提示词中明确指定命名规范要求
2. 代码规范要求
改进内容: 在提示词模板中增加更具体的若依框架规范要求。
具体措施:
- 若依框架的包结构规范
- 若依框架的注解使用规范
- 若依框架的异常处理规范
- 若依框架的权限控制规范
3. 测试要求
改进内容: 在提示词模板中增加更详细的测试要求。
具体措施:
- 明确指定测试覆盖率要求(如 > 80%)
- 明确指定测试场景(正常场景、异常场景、边界条件)
- 明确指定测试框架和工具
相关文档
总结
003-03 部署操作功能的开发过程整体顺利,成功实现了通用的 ZIP 部署服务,与 003-02 完全解耦。通过严格的 SSOT 流程执行,确保了所有开发活动都有文档依据,提高了代码的可追溯性和可维护性。
本次复盘总结了 5 条成功经验、5 个改进点、3 个问题分析和 7 项行动计划。特别值得一提的是,通用接口设计的成功实践和组件复用的有效策略,为后续的开发工作提供了宝贵的经验。
在后续的开发工作中,我们将继续遵循 SSOT 流程,严格执行项目规则,不断优化开发过程,提高开发效率和代码质量。