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

119 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 复盘文档
## 元数据
- 需求编号004-06
- 创建时间2026-02-06
- 创建人AI Assistant
- 状态:已完成
## 复盘概述
本次复盘对 Tooling API 访问和安全功能004-06的开发过程进行了全面回顾从需求定义到变更日志的每个阶段都进行了分析总结了成功经验、改进点、问题分析和行动计划旨在提高后续开发过程的效率和质量。
## 目标与实际产出对比
### 目标
- 实现 Tooling API 访问和安全功能包括访问方法查询、访问资源类型查询、API 访问级别查询、API 类型查询、激活平台连接器类型查询、激活平台创建类型查询
- 实现操作日志记录功能,支持异步记录访问和安全操作
- 遵循 SSOT 流程,确保所有开发活动都有文档依据
- 生成符合项目规范和若依框架的代码
### 实际产出
- 成功实现了 6 个访问和安全查询接口访问方法、访问资源类型、API 访问级别、API 类型、激活平台连接器类型、激活平台创建类型)
- 成功实现了操作日志记录功能,使用 Spring @Async 异步记录
- 严格按照 SSOT 流程执行每个阶段都有相应的文档需求、设计、决策、SQL、提示词、会话记录、变更日志
- 生成了 20 个代码文件7 个代码生成器生成 + 13 个手动实现),符合项目规范和若依框架要求
- 定义了 4 个标准错误码TOOLING_ACCESS_001 ~ TOOLING_ACCESS_004
- 创建了 1 个数据库表datai_tooling_access_security_log
## 成功经验
### 1. SSOT 流程的严格执行
从需求定义到变更日志的每个阶段都严格按照项目规则执行,确保了所有开发活动都有文档依据。特别是在阶段 4数据库结构详细比对了 SQL 脚本和需求文档,确保了数据库设计的准确性。
### 2. 代码生成器与手动实现的良好结合
代码生成器生成了基础的 CRUD 代码Entity、Mapper、Service、Controller而手动实现则专注于业务逻辑访问和安全查询、DTO 转换、错误处理)。这种分工提高了开发效率,同时保证了代码质量。
### 3. 详细的提示词设计
阶段 5 生成的提示词包含了详细的输出格式要求、代码规范要求和接口规范要求,特别是明确了 7 个 REST API 接口的定义和 4 个错误码的设计,确保了生成的代码符合需求和设计要求。
### 4. 异步日志记录的设计
采用 Spring @Async 异步记录操作日志,避免了日志记录对主流程性能的影响。这种设计在之前的 004-05动作和自动化中也得到了验证证明了其有效性。
### 5. 复用现有组件
复用了 004-01 的 ToolingConnectionFactory 进行连接管理,复用了 SoqlBuilder 工具类构建 SOQL 查询,减少了重复代码,提高了代码的可维护性。
## 改进点
### 1. 枚举类型查询接口可以进一步优化
当前的 6 个枚举类型查询接口访问方法、访问资源类型、API 访问级别、API 类型、激活平台连接器类型、激活平台创建类型)是独立的,可以考虑合并为一个通用的枚举类型查询接口,通过参数指定查询类型,减少接口数量。
### 2. 缓存机制可以考虑引入
当前的设计选择不缓存,每次实时查询 Salesforce。在实际生产环境中这些枚举类型的数据变化频率较低可以考虑引入缓存机制如 Redis减少 Salesforce API 调用次数,提高查询性能。
### 3. 单元测试覆盖可以更全面
虽然提示词中要求了单元测试,但在实际代码生成中,单元测试的覆盖可以更全面,特别是针对异常处理分支的测试。
## 问题分析
### 问题 1Controller 中的错误码使用不够精确
在生成的 ToolingAccessSecurityController 中所有查询接口都使用了相同的错误码TOOLING_ACCESS_002来表示查询失败没有根据具体的查询类型使用对应的错误码。
**根因**:提示词中的错误码使用示例不够具体,没有明确说明每个查询接口应该使用哪个错误码。
**解决方案**:在后续的提示词设计中,增加更具体的错误码使用说明,明确每个查询接口应该使用哪个错误码。
### 问题 2DTO 类的字段映射可以更丰富
当前的 DTO 类(如 AccessMethodDTO、AccessResourceTypeDTO 等)只包含了基本的字段(如 name、description可以根据 Salesforce Tooling API 返回的实际数据,增加更多的字段映射。
**根因**:需求文档中对 DTO 字段的定义不够详细,只列出了基本字段。
**解决方案**:在后续的需求文档中,增加更详细的 DTO 字段定义,或者在实际开发中根据 Salesforce API 返回的数据动态调整。
## 行动计划
| 序号 | 行动项 | 责任人 | 时间节点 | 优先级 |
|------|--------|--------|----------|--------|
| 1 | 优化提示词中的错误码使用说明 | AI Assistant | 立即执行 | 高 |
| 2 | 探索引入缓存机制Redis | 项目团队 | 下一个迭代 | 中 |
| 3 | 完善单元测试覆盖 | AI Assistant | 立即执行 | 中 |
| 4 | 完善 DTO 字段映射 | AI Assistant | 下一个迭代 | 低 |
## 提取模式
### 有效的 Prompt 技巧
1. **明确的接口定义**:在提示词中明确列出所有 REST API 接口的定义(请求方式、请求路径、功能描述),可以提高生成代码的准确性和完整性。
2. **详细的错误码设计**:在提示词中详细定义错误码(包括错误码、错误信息、使用场景),可以确保生成的代码有完整的错误处理机制。
3. **分层架构的明确要求**在提示词中明确要求分层架构Controller → Service → Factory → Tooling API可以确保生成的代码结构清晰、职责明确。
### 避免的坑
1. **不要忽略 DTO 字段的详细定义**:在需求文档和提示词中,应该详细定义 DTO 的字段,避免生成的 DTO 字段不完整。
2. **不要混淆错误码的使用场景**:不同的错误应该使用不同的错误码,避免所有错误都使用同一个错误码,导致问题定位困难。
3. **不要忽视性能优化**:虽然异步日志记录已经优化了性能,但在高并发场景下,还应该考虑引入缓存机制,减少 Salesforce API 调用次数。
## 模板迭代
经过本次复盘,发现当前的提示词模板在以下方面可以改进:
1. **错误码使用示例**:增加更具体的错误码使用示例,明确每个接口应该使用哪个错误码。
2. **DTO 字段定义**:增加 DTO 字段定义的模板,要求详细列出每个字段的名称、类型、说明。
3. **性能优化建议**:增加性能优化的建议,如缓存机制、批量查询等。
计划在下一个迭代中更新提示词模板,增加上述内容。
## 相关文档
- [需求文档](../requirements/sub/2026-01-28-004-06-访问和安全.md)
- [设计文档](../design/2026-02-03-004-06-访问和安全-设计.md)
- [决策文档](../decisions/2026-02-03-004-06-ADR-访问和安全技术选型.md)
- [SQL 脚本](../sql/2026-02-03-004-06-访问和安全操作日志.sql)
- [提示词文档](../prompts/2026-02-06-004-06-prompt-访问和安全.md)
- [变更日志](../changelog/2026-02-06-004-06-changelog.md)
- [API 文档](../api-docs/2026-02-06-004-06-api.md)