9.2 KiB
复盘文档 - 高级功能 (004-07)
元数据
- 需求编号: 004-07
- 需求名称: 高级功能
- 创建时间: 2026-02-06
- 创建人: AI Assistant
- 状态: 已完成
复盘概述
本次复盘对 Tooling API 高级功能模块的开发过程进行了全面回顾,从需求定义到变更日志的每个阶段都进行了分析,总结了成功经验、改进点、问题分析和行动计划,旨在提高后续开发过程的效率和质量。
高级功能模块实现了 12 个元数据类型的查询功能,包括聚合和计算、预测和预测、激活和应用三大类功能,为 Salesforce Tooling API 的高级元数据查询提供了完整的支持。
目标与实际产出对比
目标
- 实现 12 个元数据类型的查询功能
- 遵循 SSOT 流程,确保所有开发活动都有文档依据
- 生成符合项目规范的代码
- 提供完整的 REST API 接口
实际产出
- 成功实现了 12 个元数据类型的查询功能:
- 聚合和计算:AccumulateResultOperator、AccumulateResultCondInputType、AggregateExpressionResultColumnMetadata、AggregateQueryResultColumnMetadata
- 预测和预测:AdvAcctFrcstDisplayGroupType、AdvAcctFcstMeasureType、AdvAcctFcstFormulaType、AdvAcctFcstComputationMethod
- 激活和应用:ActivationFlowType、ActivationFeatureType、ActivationAppType、ACPStatus
- 严格按照 SSOT 流程执行,每个阶段都有相应的文档
- 生成了 25 个代码文件(7 个代码生成器生成 + 18 个手动实现)
- 提供了 12 个 REST API 接口
- 定义了 14 个错误码
- 创建了 1 个数据库表用于操作日志记录
成功经验
1. SSOT 流程的严格执行
从需求定义到变更日志的每个阶段都严格按照项目规则执行,确保了所有开发活动都有文档依据。特别是在阶段 4(数据库结构)中,详细比对了 SQL 脚本和需求文档,确保了数据库设计的准确性。
2. 代码生成器与手动实现的良好结合
代码生成器生成了基础的 CRUD 代码(Entity、Mapper、Service、Controller),而手动实现则专注于业务逻辑(元数据查询、DTO 转换、错误处理)。这种分工提高了开发效率,同时保证了代码质量。
3. 详细的 DTO 设计
为每个元数据类型设计了独立的 DTO 类,虽然字段简单(只有 name 和 description),但结构清晰,便于后续扩展。同时设计了统一的 Result 包装类,提高了接口响应的一致性。
4. 异步日志记录的设计
采用 Spring @Async 异步记录操作日志,避免了日志记录对主流程性能的影响。这种设计在之前的 004-05(动作和自动化)和 004-06(访问和安全)中也得到了验证,证明了其有效性。
5. 复用现有组件
复用了 004-01 的 ToolingConnectionFactory 进行连接管理,复用了 SoqlBuilder 工具类构建 SOQL 查询,减少了重复代码,提高了代码的可维护性。
改进点
1. DTO 字段可以更丰富
当前 DTO 只包含 name 和 description 两个字段,如果后续需要更多字段(如 Id、CreatedDate 等),需要修改 DTO 类和转换逻辑。建议在初始设计时考虑更全面的字段映射。
2. 缓存机制可以考虑
元数据类型通常是固定的枚举值,不会频繁变化。可以考虑引入缓存机制(如 Redis 或本地缓存),减少重复查询 Salesforce API 的次数,提高查询性能。
3. 批量查询接口可以考虑
当前每个元数据类型都有独立的查询接口,如果前端需要同时查询多个元数据类型,需要发起多次请求。可以考虑提供批量查询接口,一次性返回多个元数据类型的数据。
4. 接口文档的自动化生成
当前 API 文档是手动编写的,维护成本较高。可以探索使用 Swagger 或 SpringDoc 自动生成 API 文档,提高文档的准确性和维护性。
问题分析
问题 1:部分元数据类型在 Salesforce 中可能不存在
现象: 在开发过程中发现,部分元数据类型(如 AccumulateResultOperator)在某些 Salesforce 版本中可能不存在或不可访问。
根因: Salesforce 的不同版本和不同许可证类型对 Tooling API 的支持程度不同,部分高级功能可能只在特定版本中可用。
解决方案:
- 在文档中明确标注每个接口的 Salesforce 版本要求
- 在代码中增加对元数据类型不存在的处理,返回友好的错误提示
- 建议用户在使用前检查其 Salesforce 版本是否支持相应的元数据类型
问题 2:错误码设计过于细化
现象: 为 12 个查询接口设计了 12 个独立的错误码(TOOLING_ADVANCED_002 ~ TOOLING_ADVANCED_013),导致错误码数量较多。
根因: 希望为每个查询操作提供精确的错误定位,但过度细化的错误码增加了维护成本。
解决方案:
- 考虑将同类错误合并,如将所有查询失败错误合并为一个通用的"查询失败"错误码
- 在错误消息中提供具体的操作类型信息,便于问题定位
- 在日志中记录详细的错误信息,便于排查问题
问题 3:缺少单元测试
现象: 生成的代码中没有包含单元测试。
根因: 阶段 5 的提示词中没有明确要求生成单元测试。
解决方案:
- 在后续的提示词设计中,增加对单元测试的要求
- 明确指定单元测试的覆盖率要求(如不低于 80%)
- 明确指定测试用例的设计要求(包括正常场景和异常场景)
行动计划
| 序号 | 行动项 | 责任人 | 时间节点 | 优先级 |
|---|---|---|---|---|
| 1 | 在文档中标注 Salesforce 版本要求 | AI Assistant | 立即执行 | 高 |
| 2 | 优化错误码设计,合并同类错误 | AI Assistant | 下一个迭代 | 中 |
| 3 | 补充单元测试 | 开发团队 | 下一个迭代 | 高 |
| 4 | 探索缓存机制的实现 | 开发团队 | 后续迭代 | 低 |
| 5 | 探索批量查询接口的设计 | 开发团队 | 后续迭代 | 低 |
| 6 | 探索 Swagger 自动生成 API 文档 | 开发团队 | 后续迭代 | 低 |
提取模式
有效的 Prompt 技巧
-
明确的文件路径要求 在提示词中明确指定需要生成的文件的完整路径,可以避免文件生成到错误的位置。例如:"在
datai-salesforce-tooling/src/main/java/com/datai/tooling/dto/目录下创建 DTO 类"。 -
分层的代码结构设计 将代码按 Controller、Service、DTO、ErrorCode 等分层设计,每层独立生成,可以提高代码的可维护性和可读性。
-
复用现有组件的明确指示 在提示词中明确指示复用哪些现有组件(如 ToolingConnectionFactory、SoqlBuilder),可以避免重复造轮子,提高开发效率。
避免的坑
-
不要忽视 Salesforce 版本差异 Salesforce 的不同版本对 Tooling API 的支持程度不同,开发前需要确认目标 Salesforce 版本是否支持相应的元数据类型。
-
不要过度设计错误码 错误码的设计需要在精确性和维护成本之间取得平衡,过度细化的错误码会增加维护成本。
-
不要忽略单元测试 单元测试是保证代码质量的重要手段,在代码生成阶段就应该考虑单元测试的生成。
模板迭代
经过本次复盘,发现当前的提示词模板在以下方面可以改进:
-
增加 Salesforce 版本兼容性检查要求 在提示词中增加对 Salesforce 版本兼容性的检查要求,确保生成的代码能够在目标版本中正常运行。
-
增加单元测试生成要求 在提示词中明确指定需要生成单元测试,并明确测试覆盖率和测试用例设计要求。
-
增加缓存机制设计建议 对于查询类接口,在提示词中增加缓存机制的设计建议,提高查询性能。
计划在下一个迭代中更新提示词模板,增加上述内容。
相关文档
总结
本次高级功能模块的开发过程总体顺利,严格按照 SSOT 流程执行,成功实现了 12 个元数据类型的查询功能。通过本次复盘,总结了成功经验,识别了改进点,制定了行动计划,为后续的开发工作提供了宝贵的经验。
特别值得肯定的是:
- SSOT 流程的严格执行确保了开发过程的规范性和可追溯性
- 代码生成器与手动实现的良好结合提高了开发效率
- 异步日志记录的设计保证了系统性能
需要改进的方面包括:
- DTO 字段设计可以更丰富,便于后续扩展
- 错误码设计可以进一步优化,减少维护成本
- 需要补充单元测试,提高代码质量
通过持续的复盘和改进,相信后续的开发工作会更加高效和规范。