datai/docs/archive/retros/2026-01-27-014-1-retro.md

145 lines
9.4 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.

# 复盘文档
## 元数据
- 需求编号014-1
- 创建时间2026-01-27
- 创建人SSOT 架构师
- 状态:已完成
## 复盘概述
本次复盘对 Apex 类与触发器基础管理功能的开发过程进行了全面回顾,从需求定义到代码提交的每个阶段都进行了分析,总结了成功经验、改进点、问题分析和行动计划,旨在提高后续开发过程的效率和质量。
## 目标与实际产出对比
### 目标
- 实现 Apex 类与触发器基础管理功能,包括 Tooling API 连接管理、Apex 类 CRUD 操作、Apex 触发器 CRUD 操作
- 遵循 SSOT 流程,确保所有开发活动都有文档依据
- 生成符合项目规范的代码,包括异常处理、数据模型、工厂、管理器、服务、控制器和单元测试
### 实际产出
- ✅ 成功实现了 Apex 类与触发器基础管理功能,包括 Tooling API 连接管理、Apex 类 CRUD 操作、Apex 触发器 CRUD 操作
- ✅ 严格按照 SSOT 流程执行,每个阶段都有相应的文档(需求文档、设计文档、决策记录、提示词文档、会话记录、变更日志)
- ✅ 生成了 20 个代码文件,符合项目规范,包含 3 个单元测试
- ✅ 完整记录了会话过程,包括对话记录、生成的文档和代码、关键决策等
- ✅ 生成了 8 个 RESTful API 接口,支持 Apex 类和触发器的 CRUD 操作
## 成功经验
### 1. SSOT 流程的严格执行
从需求定义到代码提交的每个阶段都严格按照项目规则执行,确保了所有开发活动都有文档依据,提高了代码的可追溯性和可维护性。每个阶段完成后都向用户确认,确保用户对每个阶段的输出满意后再进入下一阶段。
### 2. 详细的提示词设计
阶段 5 生成的提示词包含了详细的输出格式要求、代码规范要求和测试要求,确保了生成的代码符合项目规范和需求。提示词中明确指定了需要生成的 20 个文件17 个核心文件 + 3 个单元测试),并提供了详细的代码规范要求(命名规范、注释规范、代码格式、异常处理、日志规范、权限控制、参数验证)。
### 3. 完整的会话记录
阶段 7 记录了完整的会话过程,包括对话记录、生成的文档和代码、关键决策等,确保了会话的可追溯性和完整性。会话记录包含了从阶段 1 到阶段 8 的完整过程,包括每个阶段的完成时间、生成文档、关键决策等。
### 4. 有效的 AI 质疑与解决方案
在代码生成过程中AI 主动质疑了 Service 实现类中直接 new Manager 和 Factory 的问题,并及时进行了修正。这体现了代码生成过程中的自我审查和改进能力,确保了生成的代码符合 Spring Boot 最佳实践。
### 5. 架构一致性的保证
生成的代码严格遵循了项目的架构设计,包括继承 `AbstractConnectionFactory<ToolingConnection>`、使用 `ConnectionProxy` 创建代理连接、复用 `SessionManager` 获取 Session 信息、遵循若依框架规范、遵循 Spring Boot 最佳实践等。这确保了新代码与现有代码的架构一致性。
## 改进点
### 1. 阶段间的过渡可以更流畅
在阶段转换时,可以更主动地向用户解释下一阶段的目的和流程,提高用户的理解和参与度。例如,在进入阶段 2方案设计可以更详细地解释方案设计的目标、需要考虑的方面、预期的输出等。
### 2. 代码生成前的验证可以更严格
在生成代码前,可以增加对设计文档和决策记录的再次验证,确保代码生成的准确性。例如,可以检查设计文档中的所有设计要点是否都在提示词中得到了体现,决策记录中的所有决策是否都在代码中得到了落实。
### 3. API 文档的自动生成可以考虑
可以探索使用 Swagger 等工具自动生成 API 文档,提高文档的准确性和维护性。当前阶段 9 需要手动创建 API 文档,如果能够自动生成,可以节省时间并减少人为错误。
### 4. 单元测试的覆盖率可以提高
虽然生成了 3 个单元测试类,但测试覆盖率可能不够全面。可以考虑增加更多的测试用例,包括边界条件、异常场景、并发场景等,提高代码的可靠性和稳定性。
## 问题分析
### 问题 1Service 实现类中直接 new Manager 和 Factory
**问题描述**:在 `ApexClassServiceImpl``ApexTriggerServiceImpl``listApexClasses``listApexTriggers` 方法中,直接 new 了 Manager 和 Factory 实例,没有使用依赖注入。
**根因**:提示词中的依赖注入要求不够具体,没有明确要求使用 `@Autowired` 注解进行依赖注入。
**解决方案**:在 Service 实现类中添加 `@Autowired private ToolingConnectionFactory connectionFactory;`,移除 `ApexClassManager manager = new ApexClassManager();``ToolingConnectionFactory factory = new ToolingConnectionFactory();`,直接使用注入的 `connectionFactory.getConnection(orgType)`
**预防措施**:在后续的提示词设计中,增加更具体的依赖注入要求,明确要求使用 `@Autowired` 注解进行依赖注入,避免直接 new 实例。
### 问题 2阶段 4数据库结构被跳过
**问题描述**:本需求不涉及数据库表,所有数据存储在 Salesforce 端,因此阶段 4数据库结构被跳过。
**根因**:需求本身不涉及数据库表,这是正常的设计决策。
**解决方案**:在会话记录中明确标注阶段 4 被跳过,并说明原因。
**预防措施**:在后续的需求分析中,提前识别是否涉及数据库表,如果涉及则正常执行阶段 4如果不涉及则明确标注跳过。
## 行动计划
### 针对改进点 1阶段间的过渡可以更流畅
- **行动**:在阶段转换时,增加对下一阶段的目的和流程的解释
- **责任人**AI Assistant
- **时间**:立即执行
### 针对改进点 2代码生成前的验证可以更严格
- **行动**:在生成代码前,增加对设计文档和决策记录的再次验证
- **责任人**AI Assistant
- **时间**:立即执行
### 针对改进点 3API 文档的自动生成可以考虑
- **行动**:探索使用 Swagger 等工具自动生成 API 文档
- **责任人**:项目团队
- **时间**:下一个迭代
### 针对改进点 4单元测试的覆盖率可以提高
- **行动**:增加更多的测试用例,包括边界条件、异常场景、并发场景等
- **责任人**AI Assistant
- **时间**:下一个迭代
### 针对问题 1Service 实现类中直接 new Manager 和 Factory
- **行动**:在后续的提示词设计中,增加更具体的依赖注入要求
- **责任人**AI Assistant
- **时间**:立即执行
## 提取模式
### 有效的 Prompt 技巧
#### 1. 具体的输出格式要求
在提示词中明确指定需要生成的文件、路径、格式等,可以提高生成代码的准确性和规范性。例如,在本次提示词中明确指定了需要生成的 20 个文件,包括文件路径、类名、方法名等。
#### 2. 引用真源
在提示词开头引用需求文档和设计文档的链接,可以确保生成的代码符合需求和设计要求。例如,在本次提示词中引用了 `[需求文档](../requirements/REQ-014-1.md)``[设计文档](../design/2026-01-27-014-1-Apex类与触发器基础管理-设计.md)`
#### 3. 详细的代码规范要求
在提示词中明确指定代码规范、命名规范、注释规范等,可以提高生成代码的质量和可读性。例如,在本次提示词中详细说明了命名规范、注释规范、代码格式、异常处理、日志规范、权限控制、参数验证等要求。
### 避免的坑
#### 1. 不要使用模糊的描述
在提示词中使用模糊的描述(如"请生成高质量的代码"),会导致生成的代码不符合预期。应该使用具体的描述,如"请生成 20 个文件,包括 3 个异常类、2 个 Domain 类、6 个 DTO 类、2 个 VO 类、1 个 Factory 类、2 个 Manager 类、4 个 Service 类、2 个 Controller 类、3 个单元测试类"。
#### 2. 不要忽略测试要求
在提示词中忽略测试要求,会导致生成的代码缺少单元测试,降低代码的质量和可靠性。应该明确要求生成单元测试,包括测试覆盖率、测试场景等。
#### 3. 不要违反项目规则
在代码生成过程中违反项目规则(如不遵循若依框架规范),会导致生成的代码不符合项目要求,需要重新生成。应该严格遵守项目规则,包括架构设计、代码规范、命名规范等。
## 模板迭代
经过本次复盘,发现当前的提示词模板在依赖注入要求方面可以更具体。计划在下一个迭代中更新提示词模板,增加更具体的依赖注入要求,包括:
- 明确要求使用 `@Autowired` 注解进行依赖注入
- 明确要求不要直接 new 实例
- 明确要求使用 Spring 的依赖注入机制
## 相关文档
- [需求文档](../requirements/REQ-014-1.md)
- [设计文档](../design/2026-01-27-014-1-Apex类与触发器基础管理-设计.md)
- [决策记录](../decisions/adr/2026-01-27-014-1-ADR-ToolingAPI客户端代码生成方案.md)
- [提示词文档](../prompts/2026-01-27-014-1-prompt-Apex类与触发器基础管理.md)
- [会话记录](../sessions/2026-01-27-014-1-session.md)
- [变更日志](../changelog/2026-01-27-014-1-changelog.md)
- [主索引](../index.md)