6.1 KiB
6.1 KiB
ADR-004-03: Tooling API 开发工具功能技术选型
状态
已接受
日期
2026-01-28
背景
Tooling API 开发工具功能是 Salesforce Tooling API 集成的核心功能之一,需要设计一个可靠、高效的开发工具方案。该功能需要满足以下要求:
- 诊断和调试:支持 Apex 代码覆盖率查询、Apex 测试队列管理、Apex 日志获取
- 查询和搜索:支持 Apex 类成员、Apex 触发器成员、Visualforce 页面成员、Visualforce 组件成员查询
- 连接复用:复用子需求 004-01 的 ToolingConnectionFactory 获取连接
- 操作日志记录:所有开发工具操作记录到数据库,支持审计和追溯
- SOQL 查询支持:支持使用 SOQL 查询各种开发工具数据
- 异常处理:统一处理各种异常情况
- RESTful API:提供标准的 REST API 接口
- 性能优化:异步记录日志,不影响主流程性能
决策
选择方案 1:Service + ToolingConnectionFactory + 异步日志记录,理由如下:
- 复用现有基础设施:复用子需求 004-01 的 ToolingConnectionFactory 获取连接,避免重复实现连接管理逻辑
- 异步日志记录:使用 CompletableFuture 异步记录操作日志,不影响主流程性能
- 统一异常处理:使用 datai-salesforce-common 模块的异常体系,统一处理各种异常情况
- SOQL 查询支持:使用 SoqlBuilder 构建 SOQL 查询语句,简化查询逻辑
- 开发效率高:利用现有的基础设施,可以快速实现开发工具功能
- 维护成本低:与项目现有架构保持一致,与 Partner API、Apex API、Metadata API 的实现方式一致
- 性能优秀:异步日志记录不影响主流程性能,连接复用提高性能
- 审计追溯完善:所有开发工具操作记录到数据库,便于审计和故障排查
后果
正面影响
- 开发效率高:利用现有的 ToolingConnectionFactory 和 SoqlBuilder,可以快速实现开发工具功能
- 代码复用率高:复用子需求 004-01 的连接管理功能,避免重复实现
- 维护成本低:与项目现有架构保持一致,经过充分测试,稳定性高
- 性能优秀:异步日志记录不影响主流程性能,连接复用提高性能
- 审计追溯完善:所有开发工具操作记录到 datai_tooling_devtools_operation_log 表,便于审计和故障排查
- 架构一致:与 datai-salesforce-tooling 模块的架构设计保持一致
- 异常处理统一:使用统一的异常体系,便于错误处理和用户提示
负面影响
- 依赖关系:需要依赖子需求 004-01 的 ToolingConnectionFactory,增加了子需求间的耦合度
- 数据库依赖:需要创建数据库表存储操作日志,增加了数据库维护成本
- 异步复杂性:异步日志记录增加了代码复杂度,需要处理异步异常
替代方案
方案 2:同步日志记录
- 技术选型:同步记录操作日志到数据库
- 优点:
- 实现简单,代码逻辑清晰
- 日志记录与操作原子性,便于事务管理
- 不需要处理异步异常
- 缺点:
- 日志记录阻塞主流程,影响性能
- 高并发场景下数据库压力大
- 用户体验差,操作响应时间长
- 适用场景:对性能要求不高,操作频率很低的项目
方案 3:仅记录失败日志
- 技术选型:只记录失败的元数据操作日志,成功的操作不记录
- 优点:
- 减少数据库写入量,提高性能
- 减少存储空间占用
- 关注失败场景,便于故障排查
- 缺点:
- 无法审计成功的操作
- 无法统计操作频率和成功率
- 不符合完整的审计要求
- 适用场景:存储空间有限,只关注失败场景的项目
方案 4:使用消息队列记录日志
- 技术选型:使用 RabbitMQ 或 Kafka 等消息队列异步记录日志
- 优点:
- 解耦日志记录与主流程
- 支持高并发场景
- 支持日志的批量处理和聚合
- 可靠性高,消息不会丢失
- 缺点:
- 需要引入消息队列组件,增加系统复杂度
- 需要配置和维护消息队列
- 增加部署和运维成本
- 日志查询需要消费消息到数据库
- 适用场景:高并发场景,需要可靠日志记录的大型项目
方案 5:文件日志记录
- 技术选型:将操作日志记录到文件,而不是数据库
- 优点:
- 实现简单,不需要数据库表
- 写入性能高
- 便于日志收集和分析(如使用 ELK)
- 缺点:
- 不便于实时查询和统计
- 需要额外的日志收集和分析工具
- 不符合关系型数据查询习惯
- 日志文件管理复杂(切割、归档、清理)
- 适用场景:有完善的日志收集和分析基础设施的项目
相关文档
决策记录
决策过程
-
识别关键决策点:
- 日志记录方式(同步 vs 异步)
- 日志存储方式(数据库 vs 文件 vs 消息队列)
- 日志记录范围(全部 vs 仅失败)
-
分析方案优缺点:
- 对比了 5 种方案的优缺点
- 评估了方案的可行性、成本、风险、可维护性
-
确定最终决策:
- 选择方案 1:Service + ToolingConnectionFactory + 异步日志记录
- 理由:复用现有基础设施、性能优秀、审计完善、与项目架构一致
-
检查已有 ADR 记录:
- 检查了子需求 004-01 和 004-02 的 ADR 记录
- 确认本决策与已有 ADR 记录无冲突
- 本决策复用了子需求 004-01 的基础设施,与 004-02 的决策保持一致
决策参与者
- AI Assistant(决策分析)
决策时间
2026-01-28