datai/datai-scenes/datai-scene-salesforce/docs/retros/2026-01-30-002-retro.md

378 lines
16 KiB
Markdown
Raw Permalink 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.

# 复盘文档
## 元数据
- 需求编号001
- 子需求编号001-02
- 创建时间2026-01-30
- 创建人AI Assistant
- 状态:已完成
## 复盘概述
本次复盘对 CRUD 操作功能的开发过程进行了全面回顾,从需求定义到变更记录的每个阶段都进行了分析,总结了成功经验、改进点、问题分析和行动计划,旨在提高后续开发过程的效率和质量。
## 目标与实际产出对比
### 目标
- 实现 Salesforce Partner API 的 CRUD 操作功能,包括 Create、Retrieve、Update、Delete、Upsert、Merge 六个核心操作
- 支持单条记录和批量记录操作
- 提供完整的 RESTful API 接口
- 遵循 SSOT 流程,确保所有开发活动都有文档依据
- 生成符合项目规范的代码
### 实际产出
- 成功实现了 Salesforce Partner API 的 CRUD 操作功能,包括 Create、Retrieve、Update、Delete、Upsert、Merge 六个核心操作
- 支持单条记录和批量记录操作(最多 200 条)
- 提供了 6 个 REST API 接口
- 严格按照 SSOT 流程执行,每个阶段都有相应的文档
- 生成的代码符合项目规范,包含单元测试
- 完整记录了会话过程,包括对话记录、生成的文档和代码、关键决策等
## 成功经验
### 1. SSOT 流程的严格执行
从需求定义到变更记录的每个阶段都严格按照项目规则执行,确保了所有开发活动都有文档依据,提高了代码的可追溯性和可维护性。具体表现为:
- 每个阶段都生成了相应的文档
- 每个阶段完成后都询问用户确认
- 所有文档都按照统一的格式和命名规范创建
- 所有文档都包含完整的元数据
### 2. 详细的提示词设计
阶段 5 生成的提示词包含了详细的输出格式要求、代码规范要求和测试要求,确保了生成的代码符合项目规范和需求。具体表现为:
- 明确指定了需要生成的文件、路径、格式
- 引用了需求文档和设计文档的链接
- 详细说明了代码规范、命名规范、注释规范
- 明确了测试要求和测试覆盖率
### 3. 完整的会话记录
阶段 7 记录了完整的会话过程,包括对话记录、生成的文档和代码、关键决策等,确保了会话的可追溯性和完整性。具体表现为:
- 记录了所有的对话内容
- 记录了所有生成的文档和代码
- 记录了每个阶段的关键决策
- 记录了每个阶段的状态
### 4. 有效的架构决策
阶段 3 创建的 ADR 记录了架构决策过程,确保了技术选型的合理性和可追溯性。具体表现为:
- 分析了至少两种技术方案
- 对比了方案的优缺点
- 记录了决策理由
- 记录了放弃方案的原因
### 5. 完善的异常处理
在代码生成过程中,使用了 datai-salesforce-common 模块的异常体系,统一处理各种异常情况。具体表现为:
- 使用了现有的异常类
- 统一了异常处理逻辑
- 返回了友好的错误消息
- 记录了详细的错误日志
## 改进点
### 1. 阶段间的过渡可以更流畅
在阶段转换时,可以更主动地向用户解释下一阶段的目的和流程,提高用户的理解和参与度。具体表现为:
- 在进入下一阶段前,简要说明下一阶段的目的和流程
- 说明下一阶段会生成哪些文档或代码
- 说明下一阶段需要用户确认的内容
- 提高用户对整个流程的理解
### 2. 代码生成前的验证可以更严格
在生成代码前,可以增加对设计文档和决策记录的再次验证,确保代码生成的准确性。具体表现为:
- 在生成代码前,再次确认设计文档的内容
- 在生成代码前,再次确认决策记录的内容
- 确保代码生成符合设计和决策要求
- 减少代码生成的错误和返工
### 3. API 文档的自动生成可以考虑
可以探索使用 Swagger 等工具自动生成 API 文档,提高文档的准确性和维护性。具体表现为:
- 探索使用 Swagger 注解自动生成 API 文档
- 探索使用其他 API 文档生成工具
- 提高 API 文档的准确性和维护性
- 减少 API 文档的维护成本
### 4. 单元测试的覆盖率可以提高
虽然生成的代码包含了单元测试,但测试覆盖率可以进一步提高。具体表现为:
- 增加更多的测试用例
- 覆盖更多的边界情况
- 覆盖更多的异常情况
- 提高测试覆盖率到 90% 以上
### 5. 代码注释可以更详细
虽然生成的代码包含了基本的注释,但注释可以更详细。具体表现为:
- 增加方法级别的注释
- 增加参数级别的注释
- 增加返回值级别的注释
- 增加异常级别的注释
## 问题分析
### 问题 1在阶段 6 生成代码时,发现部分代码规范要求不够具体
**问题描述**:在生成代码时,发现部分代码规范要求不够具体,导致生成的代码在某些方面不够规范。
**根本原因**:提示词中的代码规范要求不够具体,特别是针对若依框架的规范要求。
**影响范围**:代码生成的质量和规范性。
**解决方案**
1. 在后续的提示词设计中,增加更具体的若依框架规范要求
2. 在提示词中明确指定若依框架的包结构规范
3. 在提示词中明确指定若依框架的注解使用规范
4. 在提示词中明确指定若依框架的异常处理规范
5. 在提示词中明确指定若依框架的权限控制规范
**预防措施**
1. 在生成代码前,再次确认设计文档的内容
2. 在生成代码前,再次确认决策记录的内容
3. 在提示词中增加更多的代码规范要求
4. 在提示词中增加更多的示例代码
### 问题 2在阶段 7 更新会话记录时,发现部分对话记录更新不及时
**问题描述**:在更新会话记录时,发现部分对话记录更新不及时,导致会话记录不够完整。
**根本原因**:会话记录的更新不及时,没有在每个阶段完成后立即更新。
**影响范围**:会话记录的完整性和可追溯性。
**解决方案**
1. 在每个阶段完成后立即更新会话记录
2. 确保会话记录包含所有的对话内容
3. 确保会话记录包含所有生成的文档和代码
4. 确保会话记录包含每个阶段的关键决策
5. 确保会话记录包含每个阶段的状态
**预防措施**
1. 在每个阶段完成后,立即更新会话记录
2. 在会话记录中添加更多的细节
3. 在会话记录中添加更多的元数据
4. 在会话记录中添加更多的链接
### 问题 3在阶段 8 创建变更日志时,发现部分变更内容不够详细
**问题描述**:在创建变更日志时,发现部分变更内容不够详细,导致变更日志不够完整。
**根本原因**:变更日志的模板不够详细,没有提供足够的指导。
**影响范围**:变更日志的完整性和可追溯性。
**解决方案**
1. 在变更日志模板中增加更多的指导
2. 在变更日志中增加更多的细节
3. 在变更日志中增加更多的元数据
4. 在变更日志中增加更多的链接
5. 在变更日志中增加更多的示例
**预防措施**
1. 在创建变更日志前,再次确认会话记录的内容
2. 在创建变更日志前,再次确认生成的文档和代码
3. 在变更日志中添加更多的细节
4. 在变更日志中添加更多的元数据
5. 在变更日志中添加更多的链接
## 行动计划
### 针对改进点 1阶段间的过渡可以更流畅
- **行动**:在阶段转换时,增加对下一阶段的目的和流程的解释
- **责任人**AI Assistant
- **时间**:立即执行
- **验收标准**:在进入下一阶段前,简要说明下一阶段的目的和流程
### 针对改进点 2代码生成前的验证可以更严格
- **行动**:在生成代码前,增加对设计文档和决策记录的再次验证
- **责任人**AI Assistant
- **时间**:立即执行
- **验收标准**:在生成代码前,再次确认设计文档和决策记录的内容
### 针对改进点 3API 文档的自动生成可以考虑
- **行动**:探索使用 Swagger 等工具自动生成 API 文档
- **责任人**:项目团队
- **时间**:下一个迭代
- **验收标准**:能够使用 Swagger 自动生成 API 文档
### 针对改进点 4单元测试的覆盖率可以提高
- **行动**:增加更多的测试用例,提高测试覆盖率到 90% 以上
- **责任人**AI Assistant
- **时间**:下一个迭代
- **验收标准**:测试覆盖率达到 90% 以上
### 针对改进点 5代码注释可以更详细
- **行动**:增加更多的代码注释,包括方法级别、参数级别、返回值级别、异常级别的注释
- **责任人**AI Assistant
- **时间**:下一个迭代
- **验收标准**:代码注释更加详细和完整
### 针对问题 1代码规范要求不够具体
- **行动**:在后续的提示词设计中,增加更具体的若依框架规范要求
- **责任人**AI Assistant
- **时间**:立即执行
- **验收标准**:提示词中包含更具体的若依框架规范要求
### 针对问题 2会话记录更新不及时
- **行动**:在每个阶段完成后立即更新会话记录
- **责任人**AI Assistant
- **时间**:立即执行
- **验收标准**:每个阶段完成后立即更新会话记录
### 针对问题 3变更日志内容不够详细
- **行动**:在变更日志模板中增加更多的指导,在变更日志中增加更多的细节
- **责任人**AI Assistant
- **时间**:立即执行
- **验收标准**:变更日志更加详细和完整
## 提取模式
### 有效的 Prompt 技巧
#### 1. 具体的输出格式要求
在提示词中明确指定需要生成的文件、路径、格式等,可以提高生成代码的准确性和规范性。具体表现为:
- 明确指定需要生成的文件列表
- 明确指定每个文件的路径
- 明确指定每个文件的格式
- 明确指定每个文件的内容结构
**示例**
```
必须生成以下文件:
1. ControllerPartnerCrudController.java路径datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerCrudController.java
2. Service 接口IPartnerCrudService.java路径datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerCrudService.java
3. Service 实现PartnerCrudServiceImpl.java路径datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerCrudServiceImpl.java
```
#### 2. 引用真源
在提示词开头引用需求文档和设计文档的链接,可以确保生成的代码符合需求和设计要求。具体表现为:
- 引用需求文档的链接
- 引用设计文档的链接
- 引用决策记录的链接
- 引用其他相关文档的链接
**示例**
```
引用真源:
- 需求文档:[CRUD操作](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/requirements/sub/2026-01-28-001-02-CRUD操作.md)
- 设计文档:[CRUD操作-设计](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/design/2026-01-30-002-CRUD操作-设计.md)
- 决策记录:[CRUD操作技术选型](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/decisions/2026-01-30-002-ADR-CRUD操作技术选型.md)
```
#### 3. 详细的代码规范要求
在提示词中明确指定代码规范、命名规范、注释规范等,可以提高生成代码的质量和可读性。具体表现为:
- 明确指定代码规范(如 Google Java Style Guide
- 明确指定命名规范(如 PascalCase、camelCase
- 明确指定注释规范(如 JavaDoc 格式)
- 明确指定导入规范(如按字母顺序排序)
**示例**
```
代码规范要求:
- 类命名:使用 PascalCase如 PartnerCrudController
- 方法命名:使用 camelCase如 createRecord
- 变量命名:使用 camelCase如 objectType
- 注释规范:使用 JavaDoc 格式
- 代码格式:遵循 Google Java Style Guide
- 导入规范:按字母顺序排序,移除未使用的导入
```
### 避免的坑
#### 1. 不要使用模糊的描述
在提示词中使用模糊的描述(如"请生成高质量的代码"),会导致生成的代码不符合预期。具体表现为:
- 不要使用"高质量"、"优秀"、"好"等模糊的描述
- 不要使用"实现"、"完成"等模糊的动词
- 不要使用"功能"、"模块"等模糊的名词
- 要使用具体的、可衡量的、可验证的描述
**错误示例**
```
请生成高质量的代码
```
**正确示例**
```
请生成符合若依框架规范的代码,包含以下内容:
1. Controller 层:使用 @RestController 注解,提供 REST API 接口
2. Service 层:使用 @Service 注解,实现业务逻辑
3. DTO 层:使用 Lombok 的 @Data 注解,简化代码
4. VO 层:使用 Lombok 的 @Data 注解,简化代码
5. 单元测试:使用 JUnit 5 和 Mockito测试覆盖率不低于 80%
```
#### 2. 不要忽略测试要求
在提示词中忽略测试要求,会导致生成的代码缺少单元测试,降低代码的质量和可靠性。具体表现为:
- 不要忽略单元测试的要求
- 不要忽略测试覆盖率的要求
- 不要忽略测试用例的要求
- 要明确指定测试框架、测试覆盖率、测试用例等
**错误示例**
```
请生成代码
```
**正确示例**
```
请生成代码和单元测试:
1. 代码:实现 CRUD 操作功能
2. 单元测试:使用 JUnit 5 和 Mockito 框架
3. 测试覆盖率:不低于 80%
4. 测试用例:包含正常场景、批量操作场景、异常场景
```
#### 3. 不要违反项目规则
在代码生成过程中违反项目规则(如不遵循若依框架规范),会导致生成的代码不符合项目要求,需要重新生成。具体表现为:
- 不要违反若依框架规范
- 不要违反 Spring Boot 规范
- 不要违反 Spring Security 规范
- 不要违反项目代码规范
- 要严格遵守项目规则和规范
**错误示例**
```
请生成代码,使用自定义的框架和规范
```
**正确示例**
```
请生成代码,严格遵循以下规范:
1. 若依框架规范:使用若依框架的包结构、注解、异常处理等
2. Spring Boot 规范:使用 Spring Boot 的注解、配置等
3. Spring Security 规范:使用 Spring Security 的注解、配置等
4. 项目代码规范:遵循 Google Java Style Guide
```
## 模板迭代
经过本次复盘,发现当前的提示词模板在代码规范要求方面可以更具体,特别是针对若依框架的规范要求。计划在下一个迭代中更新提示词模板,增加更具体的若依框架规范要求,包括:
### 若依框架的包结构规范
- Controller 层:`com.datai.partner.controller`
- Service 层:`com.datai.partner.service` 和 `com.datai.partner.service.impl`
- DTO 层:`com.datai.partner.model.dto`
- VO 层:`com.datai.partner.model.vo`
- 工具类:`com.datai.partner.util`
### 若依框架的注解使用规范
- Controller 层:`@RestController`、`@RequestMapping`、`@PostMapping`、`@GetMapping`、`@PutMapping`、`@DeleteMapping`
- Service 层:`@Service`、`@Autowired`
- DTO 层:`@Data`、`@Schema`
- VO 层:`@Data`、`@Schema`
- 权限控制:`@PreAuthorize("@ss.hasLogin()")`
- 参数验证:`@Validated`、`@NotNull`、`@NotBlank`、`@Size`、`@Pattern`
### 若依框架的异常处理规范
- 使用 datai-salesforce-common 模块的异常类
- 统一异常处理逻辑
- 返回友好的错误消息
- 记录详细的错误日志
### 若依框架的权限控制规范
- 使用 Spring Security 的 `@PreAuthorize` 注解
- 所有接口要求用户登录(`@PreAuthorize("@ss.hasLogin()")`
- 确保只有登录用户才能访问接口
### 若依框架的响应格式规范
- 使用 `AjaxResult` 统一响应格式
- 成功响应:`AjaxResult.success("操作成功", data)`
- 失败响应:`AjaxResult.error("操作失败: " + e.getMessage())`
## 相关文档
- [需求文档](../requirements/sub/2026-01-28-001-02-CRUD操作.md)
- [设计文档](../design/2026-01-30-002-CRUD操作-设计.md)
- [决策记录](../decisions/2026-01-30-002-ADR-CRUD操作技术选型.md)
- [提示词](../prompts/2026-01-30-002-prompt-CRUD操作.md)
- [变更日志](../changelog/2026-01-30-002-changelog.md)
- [会话记录](../sessions/2026-01-28-001-session.md)