datai/datai-scenes/datai-scene-salesforce/docs/retros/2026-02-06-003-03-retro.md

13 KiB
Raw Blame History

复盘文档003-03 部署操作

元数据

  • 需求编号: 003-03
  • 需求名称: 部署操作
  • 创建时间: 2026-02-06
  • 创建人: AI Assistant
  • 状态: 已完成

复盘概述

本次复盘对 003-03 部署操作功能的开发过程进行了全面回顾,从需求定义到变更记录的每个阶段都进行了分析,总结了成功经验、改进点、问题分析和行动计划,旨在提高后续开发过程的效率和质量。

003-03 的核心目标是实现一个通用的 ZIP 部署服务,与 003-02 的元数据类型定义功能解耦,通过通用字节流接口接收 ZIP 数据。这是一个关键的设计决策,确保了部署服务的通用性和可复用性。


目标与实际产出对比

目标

  1. 实现通用的 ZIP 部署服务,接收字节数组格式的 ZIP 文件
  2. 支持同步轮询、状态查询和取消部署功能
  3. 与 003-02 的元数据类型定义功能解耦
  4. 复用 003-02 的部署日志表记录操作历史
  5. 遵循 SSOT 流程,确保所有开发活动都有文档依据
  6. 生成符合项目规范的代码,包含完整的单元测试

实际产出

  1. 成功实现了通用的 ZIP 部署服务Service 层接收 byte[] 格式的 ZIP 数据
  2. 实现了同步轮询机制(最多 60 次,每 5 秒一次)、状态查询和取消部署功能
  3. 与 003-02 完全解耦,通过通用字节流接口接收 ZIP 数据
  4. 复用了 003-02 的 datai_metadata_deploy_log 表,新增操作类型 deploy_zip
  5. 严格按照 SSOT 流程执行,每个阶段都有相应的文档(需求、设计、决策、提示词、会话记录、变更日志)
  6. 生成了 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. 性能测试可以考虑

改进描述: 对于同步轮询机制,可以进行性能测试,验证在高并发场景下的表现。

具体措施:

  • 设计性能测试方案,模拟高并发部署场景
  • 测试轮询机制的性能瓶颈

预期效果: 确保系统在高并发场景下的稳定性和性能。


问题分析

问题 1VO 类命名规范的决策

问题描述: 提示词中要求生成 AsyncResultVO,但项目中已有的 VO 类使用 Vo 后缀(如 DeployResultVo)。

根因分析:

  • 提示词中的命名规范与项目现有代码不一致
  • 在生成代码前,没有充分检查项目现有的命名规范

解决方案:

  • 为了保持与现有代码的一致性,采用 Vo 后缀(AsyncResultVo, DeployMessageVo
  • 在后续的提示词设计中,增加对项目现有命名规范的检查

预防措施:

  • 在生成代码前,先扫描项目现有的代码,了解命名规范
  • 在提示词中明确指定命名规范要求

问题 2Service 返回值设计的决策

问题描述: 提示词中 deploy 方法返回 StringdeployId而 003-02 的类似方法返回 DeployResultVo

根因分析:

  • 003-03 的设计是通用部署接口,与 003-02 的具体元数据部署有所不同
  • 调用方可能需要先获取 deployId 再进行轮询

解决方案:

  • 保持 deploy 方法返回 StringdeployId
  • 同时提供 pollDeployStatus 方法返回完整结果
  • 这种设计符合通用接口的设计理念

预防措施:

  • 在设计接口时,充分考虑调用方的使用场景
  • 在文档中明确说明设计决策的原因

问题 3日志记录时机的决策

问题描述: 应该在部署提交时立即记录日志,还是等待部署完成后再记录?

根因分析:

  • 如果只记录一次,可能会丢失部署过程中的信息
  • 如果记录多次,可能会增加系统开销

解决方案:

  • 采用两次记录策略:
    1. 部署提交时立即记录 Queued 状态(异步)
    2. 部署完成时更新状态(异步)
  • 这样可以确保即使部署过程中断,也能在数据库中留下记录

预防措施:

  • 在设计日志记录策略时,充分考虑数据完整性和系统性能的平衡
  • 采用异步处理提高性能

行动计划

序号 行动项 责任人 时间节点 优先级
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 流程,严格执行项目规则,不断优化开发过程,提高开发效率和代码质量。