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

325 lines
12 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-01
- 复盘日期2026-02-03
- 创建人AI Assistant
- 状态:已完成
## 复盘概述
本次复盘对 Tooling API 连接管理功能的开发过程进行了全面回顾。从需求定义到变更记录归档,完整执行了 SSOT 流程的 8 个阶段。通过复盘总结了成功经验、识别了改进点、分析了遇到的问题,并制定了具体的行动计划,旨在提高后续开发过程的效率和质量。
## 目标与实际产出对比
### 目标
- 实现 Tooling API 连接管理功能,包括获取连接、清除缓存、测试连接、设置调用选项、设置调试头部
- 采用工厂模式管理连接,继承 AbstractConnectionFactory
- 使用 ConcurrentHashMap 实现线程安全的连接缓存
- 提供完整的 RESTful API 接口5 个接口)
- 实现完整的单元测试,测试覆盖率不低于 80%
- 遵循 SSOT 流程,确保所有开发活动都有文档依据
### 实际产出
- ✅ 成功实现了 Tooling API 连接管理的 5 个核心功能
- ✅ 实现了 ToolingConnectionFactory正确继承 AbstractConnectionFactory
- ✅ 使用 ConcurrentHashMap 实现线程安全的连接缓存
- ✅ 提供了 5 个 RESTful API 接口,符合 RESTful 规范
- ✅ 实现了 19 个单元测试用例,覆盖 Service、Factory、Controller 三层
- ✅ 严格按照 SSOT 流程执行,每个阶段都有相应的文档
- ✅ 生成了 11 个 Java 文件,代码结构清晰、规范
- ✅ 定义了 8 种错误类型,实现了完善的异常处理机制
## 成功经验
### 1. SSOT 流程的严格执行
从需求定义到变更记录归档,每个阶段都严格按照项目规则执行。这种规范化的流程确保了:
- 所有开发活动都有文档依据
- 代码的可追溯性和可维护性大大提高
- 团队成员可以快速理解需求和设计决策
- 减少了沟通成本和返工风险
### 2. 架构决策的科学性
在阶段 3 的架构决策中,对每个技术选型都进行了充分的分析和对比:
- 连接工厂架构选择了 AbstractConnectionFactory + SessionManager 方案
- 连接缓存策略选择了 ConcurrentHashMap 方案
- Session 有效性检查选择了执行简单 SOQL 查询方案
- 每个决策都有清晰的决策理由和影响分析
这种科学的决策方式为后续开发奠定了坚实的基础。
### 3. 详细的提示词设计
阶段 5 生成的提示词包含了:
- 明确的输出格式要求8 个文件的具体路径和命名)
- 详细的代码规范要求若依框架规范、Java 编码规范)
- 具体的测试要求(单元测试覆盖率不低于 80%
- 清晰的注意事项(不创建 Mapper 和 Entity、固定使用 source ORG 类型)
这种详细的提示词设计确保了生成的代码符合项目规范和需求。
### 4. 代码复用和一致性
ToolingConnectionFactory 继承 AbstractConnectionFactory复用了现有的连接管理基础设施
- 统一的连接创建逻辑
- 一致的 Session 有效性检查机制
- 相同的异常处理方式
- 标准化的缓存管理策略
这种复用大大提高了开发效率,降低了维护成本。
### 5. 完整的单元测试
实现了 19 个单元测试用例,覆盖了:
- Service 层8 个测试用例(获取连接、清除缓存、测试连接、设置调用选项、设置调试头部等)
- Factory 层5 个测试用例创建连接、缓存管理、Session 检查等)
- Controller 层6 个测试用例API 接口测试、权限控制测试等)
完整的单元测试确保了代码的质量和可靠性。
## 改进点
### 1. 阶段间的过渡可以更流畅
在阶段转换时,可以更主动地向用户解释:
- 下一阶段的目的和流程
- 需要用户确认的关键点
- 预计的产出物
这样可以提高用户的理解和参与度,减少等待时间。
### 2. 代码生成前的验证可以更严格
在生成代码前,可以增加:
- 对设计文档的再次验证
- 对决策记录的再次确认
- 对现有代码的兼容性检查
这样可以确保代码生成的准确性,减少返工。
### 3. 错误码的定义可以更系统化
当前错误码的定义虽然完整,但可以进一步:
- 建立错误码的层级结构
- 定义错误码的分配规则
- 建立错误码的维护机制
这样可以提高错误码的可维护性和可扩展性。
### 4. API 文档的示例可以更详细
API 文档中的示例可以进一步丰富:
- 增加更多的边界条件示例
- 提供不同场景下的请求/响应示例
- 增加错误场景的示例
这样可以提高 API 文档的实用性。
## 问题分析
### 问题 1连接缓存的持久化问题
**问题描述**:当前连接缓存仅在内存中,应用重启后缓存丢失。
**根因分析**
- 设计阶段考虑到当前需求不需要数据库交互
- 为了简化实现,选择了内存缓存方案
- 没有考虑到应用重启的场景
**影响**
- 应用重启后需要重新创建连接
- 会增加 Salesforce API 的调用次数
- 用户体验会有短暂影响
**解决方案**
- 短期:接受当前方案,在文档中明确说明限制
- 长期:考虑使用 Redis 等分布式缓存方案
### 问题 2单元测试的 Mock 复杂度
**问题描述**ToolingConnection 的单元测试需要大量 Mock增加了测试复杂度。
**根因分析**
- ToolingConnection 是第三方库tooling.jar的类
- 该类没有提供易于 Mock 的接口
- 测试需要模拟 Salesforce API 的响应
**影响**
- 单元测试编写耗时较长
- 测试代码复杂度较高
- 测试的可维护性降低
**解决方案**
- 使用 Mockito 的 spy 功能部分模拟 ToolingConnection
- 增加集成测试补充单元测试的不足
- 考虑封装 ToolingConnection 的适配器层,便于测试
### 问题 3权限配置的同步问题
**问题描述**Controller 中的权限注解与数据库中的权限配置需要手动同步。
**根因分析**
- 权限注解在代码中定义
- 权限数据在数据库中存储
- 两者没有自动同步机制
**影响**
- 容易遗漏权限配置
- 权限变更需要同时修改代码和数据库
- 增加了维护成本
**解决方案**
- 建立权限配置的 checklist
- 考虑开发权限配置自动生成工具
- 在代码审查时增加权限配置的检查项
## 行动计划
| 序号 | 行动项 | 责任人 | 优先级 | 计划完成时间 | 状态 |
|------|--------|--------|--------|--------------|------|
| 1 | 在阶段转换时增加流程说明 | AI Assistant | 中 | 立即执行 | 待开始 |
| 2 | 增加代码生成前的验证步骤 | AI Assistant | 中 | 立即执行 | 待开始 |
| 3 | 建立错误码管理规范文档 | 项目团队 | 低 | 下一个迭代 | 待开始 |
| 4 | 完善 API 文档示例 | AI Assistant | 中 | 立即执行 | 待开始 |
| 5 | 评估分布式缓存方案Redis | 项目团队 | 低 | 下一个迭代 | 待开始 |
| 6 | 增加集成测试补充单元测试 | 项目团队 | 中 | 下一个迭代 | 待开始 |
| 7 | 建立权限配置 checklist | AI Assistant | 中 | 立即执行 | 待开始 |
## 提取模式
### 有效的 Prompt 技巧
#### 1. 引用真源
在提示词开头明确引用需求文档和设计文档的链接,可以确保生成的代码符合需求和设计要求。
**示例**
```
请基于以下真源文档实现功能:
- 需求文档:[2026-01-28-004-01-连接管理.md](../requirements/sub/2026-01-28-004-01-连接管理.md)
- 设计文档:[2026-02-03-004-01-连接管理-设计.md](../design/2026-02-03-004-01-连接管理-设计.md)
```
#### 2. 具体的输出格式要求
在提示词中明确指定需要生成的文件、路径、格式等,可以提高生成代码的准确性和规范性。
**示例**
```
请生成以下文件:
1. Controller 类:`datai-salesforce-tooling/src/main/java/com/datai/tooling/controller/ToolingConnectionController.java`
2. Service 接口:`datai-salesforce-tooling/src/main/java/com/datai/tooling/service/IToolingConnectionService.java`
...
```
#### 3. 详细的代码规范要求
在提示词中明确指定代码规范、命名规范、注释规范等,可以提高生成代码的质量和可读性。
**示例**
```
代码规范要求:
- 遵循若依框架的代码规范
- 使用 Lombok 简化代码
- 添加 Swagger 注解(@Tag、@Operation
- 使用统一的异常处理机制
```
### 避免的坑
#### 1. 不要使用模糊的描述
在提示词中使用模糊的描述(如"请生成高质量的代码"),会导致生成的代码不符合预期。
**错误示例**
```
请生成高质量的 Tooling API 连接管理代码。
```
**正确示例**
```
请实现 ToolingConnectionController 类,包含以下方法:
1. getConnection() - 获取连接GET /salesforce/tooling/connection/get
2. clearConnection() - 清除缓存DELETE /salesforce/tooling/connection/clear
...
```
#### 2. 不要忽略测试要求
在提示词中忽略测试要求,会导致生成的代码缺少单元测试,降低代码的质量和可靠性。
**错误示例**
```
请实现 ToolingConnectionService 类。
```
**正确示例**
```
请实现 ToolingConnectionService 类,并编写单元测试:
- 单元测试覆盖率不低于 80%
- 测试正常场景和异常场景
- 使用 Mockito 进行 Mock
```
#### 3. 不要违反项目规则
在代码生成过程中违反项目规则(如不遵循若依框架规范),会导致生成的代码不符合项目要求,需要重新生成。
**错误示例**
```
请使用自定义的异常处理机制。
```
**正确示例**
```
请使用若依框架的统一异常处理机制AjaxResult
```
## 模板迭代
经过本次复盘,发现当前的提示词模板在以下方面可以改进:
### 1. 增加架构一致性检查项
在提示词中增加对架构一致性的检查要求:
```
架构一致性检查:
- [ ] 是否正确继承了 AbstractConnectionFactory
- [ ] 是否正确使用了 SessionManager
- [ ] 是否遵循了现有的包结构规范
- [ ] 是否使用了统一的异常处理机制
```
### 2. 增加测试复杂度评估
在提示词中增加对测试复杂度的评估和应对策略:
```
测试策略:
- 识别需要 Mock 的外部依赖
- 评估 Mock 的复杂度
- 确定是否需要集成测试补充
- 制定测试数据准备方案
```
### 3. 增加权限配置 checklist
在提示词中增加权限配置的 checklist
```
权限配置 checklist
- [ ] Controller 方法添加了 @PreAuthorize 注解
- [ ] 权限字符串符合命名规范(模块:功能:操作)
- [ ] 数据库中配置了对应的权限数据
- [ ] 权限配置文档已更新
```
计划在下一个迭代中更新提示词模板,增加上述内容。
## 数据洞察
### 开发效率
- **总耗时**:约 40 分钟(阶段 5 到阶段 8
- **文档数量**8 个文档需求、设计、决策、提示词、会话、变更日志、复盘、API
- **代码文件**11 个 Java 文件
- **测试用例**19 个单元测试
### 代码质量
- **代码规范**:符合若依框架规范
- **单元测试覆盖率**:预计 80% 以上
- **接口数量**5 个 REST API 接口
- **错误码数量**8 种错误类型
### 文档完整性
- **需求文档**:完整,包含功能描述、入参/出参、实现要点
- **设计文档**:完整,包含架构设计、技术方案、接口设计
- **决策记录**:完整,包含 4 个关键决策及其理由
- **变更日志**:完整,包含详细的变更内容和影响分析
## 相关文档
- [需求文档](../requirements/sub/2026-01-28-004-01-连接管理.md)
- [设计文档](../design/2026-02-03-004-01-连接管理-设计.md)
- [决策记录](../decisions/2026-02-03-004-01-ADR-连接管理技术选型.md)
- [提示词](../prompts/2026-02-03-004-01-prompt-Tooling连接管理.md)
- [变更日志](../changelog/2026-02-03-004-01-changelog.md)
- [会话记录](../sessions/2026-02-03-004-01-session.md)
- [API 文档](../api-docs/2026-02-03-004-01-api.md)