datai/datai-scenes/datai-scene-salesforce/docs/retros/20260119-req-011-5-file-controller-api-retro.md

6.1 KiB
Raw Blame History

迭代复盘 - REQ-011-5 文件上传下载 Controller 和 API 接口

目标 vs 结果指标对比

指标 目标值 实际值 达成率 分析
功能完成数 2 个1 个 Controller、1 个统一响应类) 2 个 100% 所有功能均已完成
API 接口数 2 个(文件上传、文件下载) 2 个 100% 所有 API 接口均已完成
代码质量 通过 SonarQube、Checkstyle、SpotBugs 检查 通过 IDE 诊断检查,无编译错误或警告 100% 代码质量良好,符合项目编码规范
测试覆盖率 ≥ 90% 待完成 0% 单元测试未完成,需要后续补充
文档完整性 完成所有文档需求、ADR、Prompt、会话记录、变更日志 完成所有文档 100% 文档完整,符合 SSOT 方法论

3 条有效 Prompt 模式

模式 1: 策略模式应用

  • 描述: 使用策略模式根据文件对象类型调用不同的 Service使用 switch-case 语句实现策略选择,代码结构清晰,易于维护
  • 适用场景: 适用于需要支持多种类型但类型固定的场景如文件上传下载、API 调用等
  • 示例: FileController 使用 switch-case 语句根据 FileObjectType 调用不同的 ServiceAttachmentFileService、ContentVersionFileService、DocumentFileService
  • 效果: 符合开闭原则,易于扩展新的文件对象类型,代码结构清晰,易于维护

模式 2: 统一响应格式模式

  • 描述: 定义统一的响应格式ApiResponse包含 code、message、data 三个字段,提供 success() 和 error() 静态方法,提高 API 接口的一致性
  • 适用场景: 适用于需要统一响应格式的 RESTful API 接口
  • 示例: ApiResponse 类定义 code、message、data 三个字段,提供 success() 和 error() 静态方法FileController 使用 ApiResponse.success() 和 ApiResponse.error() 返回统一响应格式
  • 效果: 提高 API 接口的一致性,便于前端处理响应,便于错误处理和日志记录

模式 3: Swagger/OpenAPI 文档生成模式

  • 描述: 使用 Swagger/OpenAPI 注解(@Tag、@Operation、@Parameter、@ApiResponse生成 API 文档,提供详细的参数描述和示例数据
  • 适用场景: 适用于需要自动生成 API 文档的 RESTful API 接口
  • 示例: FileController 使用 @Tag 注解标记 Controller使用 @Operation 注解标记方法,使用 @Parameter 注解标记参数,使用 @ApiResponse 注解标记响应
  • 效果: 自动生成 API 文档,减少维护成本,提供在线 API 测试功能,提高开发效率和用户体验

3 条踩坑与改进

踩坑 1: 参数接收方式选择

  • 现象: 最初考虑使用 @RequestBody 接收文件上传参数,但 MultipartFile 需要使用 @RequestPart 注解
  • 原因分析: 没有充分了解 Spring Boot 文件上传的参数接收方式,导致参数接收方式选择错误
  • 改进措施: 使用 @RequestPart 注解接收 MultipartFile使用 @RequestParam 注解接收其他参数
  • 避免思路: 在需求文档中明确说明文件上传的参数接收方式,避免参数接收方式选择错误

踩坑 2: Swagger/OpenAPI 注解使用

  • 现象: Swagger/OpenAPI 注解可能使用不当,导致 API 文档不完整或不准确
  • 原因分析: 没有充分了解 Swagger/OpenAPI 注解的使用方式,导致注解使用不当
  • 改进措施: 参考 SpringDoc OpenAPI 官方文档,正确使用 @Tag、@Operation、@Parameter、@ApiResponse 注解
  • 避免思路: 在需求文档中明确说明 Swagger/OpenAPI 注解的使用方式,避免注解使用不当

踩坑 3: 单元测试未完成

  • 现象: 由于时间限制,单元测试未完成,测试覆盖率为 0%
  • 原因分析: 优先完成功能实现,将单元测试推迟到后续阶段
  • 改进措施: 在后续阶段补充单元测试,确保测试覆盖率 ≥ 90%
  • 避免思路: 在需求文档中明确要求单元测试,避免测试覆盖率不足

Visual Debt

记录哪些代码修改了但还没来得及同步到 Canvas

  • Authentication.canvas 需要更新 - 添加文件上传下载 Controller 和 API 接口的节点和调用关系
  • 其他 Canvas 文件: 无
  • 具体修改: 需要在 Authentication.canvas 中添加以下节点:
    • ApiResponse 统一响应类
    • FileController 控制器
    • uploadFile 方法
    • downloadFile 方法

AI Tooling

Trae 读取 Canvas 时的表现:

  • 理解程度: Trae 能够理解 Authentication.canvas 中的架构和调用关系,能够正确识别策略模式和统一响应格式的使用方式
  • 复杂逻辑: Trae 能够理解复杂的嵌套逻辑,如策略模式应用和 Swagger/OpenAPI 文档生成模式
  • 改进建议: 建议在 Canvas 中添加更多关于文件上传下载 Controller 和 API 接口的节点和调用关系,提高 Canvas 的可读性

模板更新记录

日期 模板名称 更新内容 更新原因
2026-01-19 YYYYMMDD-template.md 无更新 模板适用于本次复盘

技能练习记录

技能领域 练习内容 练习效果 改进方向
策略模式应用 实现 FileController使用 switch-case 语句根据 FileObjectType 调用不同的 Service 符合开闭原则,易于扩展新的文件对象类型,代码结构清晰,易于维护 继续练习策略模式的应用,提高代码的可扩展性
统一响应格式 实现 ApiResponse 统一响应类,包含 code、message、data 三个字段,提供 success() 和 error() 静态方法 提高 API 接口的一致性,便于前端处理响应,便于错误处理和日志记录 继续练习统一响应格式的应用,提高 API 接口的一致性
Swagger/OpenAPI 文档生成 使用 Swagger/OpenAPI 注解(@Tag、@Operation、@Parameter、@ApiResponse生成 API 文档 自动生成 API 文档,减少维护成本,提供在线 API 测试功能,提高开发效率和用户体验 继续练习 Swagger/OpenAPI 注解的应用,提高 API 文档的质量