datai/docs/archive/decisions/adr/0009-metadata-retrieve-deploy.md

150 lines
5.6 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.

# 架构决策记录 (ADR) 模板
## 背景
在 Salesforce 集成项目中,需要实现元数据的拉取和部署功能,以支持不同环境间的元数据管理和同步。该功能需要支持全量/增量部署、验证、单元测试以及破坏性变更,提高元数据管理效率。
## 决策
采用 Salesforce Metadata API 实现元数据拉取和部署功能,具体方案如下:
1. **技术栈选择**
- 使用 Salesforce Metadata API (SOAP) 进行元数据拉取和部署
- 使用 OAuth 2.0 进行身份认证
- 采用异步处理模式处理拉取和部署请求
- 使用 Quartz 框架实现定时任务
2. **架构设计**
- 分层架构Controller 层 -> Service 层 -> Salesforce API 层
- 异步处理:拉取和部署操作异步执行,不阻塞请求线程
- 结果轮询:使用轮询机制获取异步操作结果
- 错误处理:详细记录错误信息,支持重试机制
3. **数据库设计**
- 参考文档中推荐的数据库设计,包括:
- sf_org_config存储 Salesforce 组织配置
- sf_metadata_task定义拉取规则
- sf_job_execution记录作业执行历史
- sf_metadata_component记录元数据组件详情
- sf_deploy_history记录部署历史
4. **核心功能实现**
- 元数据拉取:支持根据 package.xml 拉取指定元数据
- 元数据部署:支持全量/增量部署、验证、单元测试和破坏性变更
- 部署结果解析:详细解析部署结果,包括错误信息和代码覆盖率
- 快速部署:支持使用验证 ID 进行快速部署
## 备选方案
### 方案 1使用 Salesforce CLI (SFDX) 命令行工具
**优点**
- 命令行工具成熟稳定,支持丰富的元数据操作
- 支持插件扩展,功能强大
- 社区活跃,文档丰富
**缺点**
- 需要在服务器上安装 SFDX CLI
- 命令行调用复杂度高,错误处理困难
- 集成到 Java 应用中不够优雅
- 性能和并发处理能力有限
### 方案 2使用第三方库封装的 Metadata API
**优点**
- 封装了复杂的 API 调用细节
- 提供更简洁的 API 接口
- 支持异步处理和结果轮询
**缺点**
- 依赖第三方库,存在版本兼容风险
- 功能可能不够全面,需要自行扩展
- 学习成本较高
## 影响
1. **系统架构**
- 增加元数据管理模块,扩展系统功能
- 引入异步处理机制,提高系统响应能力
- 增加数据库表,扩展数据模型
2. **开发流程**
- 需要熟悉 Salesforce Metadata API
- 增加异步编程复杂度
- 需要实现详细的错误处理和日志记录
3. **运维管理**
- 需要监控元数据拉取和部署任务
- 需要管理 Salesforce API 调用限制
- 需要处理异步任务的失败和重试
## 风险
1. **技术风险**
- Salesforce API 版本变更可能导致兼容性问题
- 异步处理机制可能引入复杂的并发问题
- 元数据依赖关系处理复杂,可能导致部署失败
2. **业务风险**
- 部署失败可能影响业务系统正常运行
- 元数据冲突可能导致数据不一致
- API 调用限制可能影响系统性能
3. **实施风险**
- 开发和测试周期较长
- 需要大量的测试用例验证功能
- 需要培训开发人员熟悉相关技术
## 回滚策略
1. **功能回滚**
- 对于部署失败的元数据,支持回滚到之前的版本
- 保存部署前的元数据快照,用于回滚
- 实现手动和自动回滚机制
2. **系统回滚**
- 如果新功能引入严重问题,支持禁用元数据管理模块
- 保持系统核心功能不受影响
- 提供紧急回滚脚本
## 验收标准
1. **功能验证**
- 成功拉取 Salesforce 元数据
- 成功部署元数据到目标组织
- 支持全量/增量部署、验证、单元测试和破坏性变更
- 提供详细的部署结果和错误信息
- 支持使用验证 ID 进行快速部署
2. **性能验证**
- 拉取和部署操作异步处理,不阻塞请求线程
- 支持并发处理多个拉取和部署任务
- 满足 Salesforce API 调用限制要求
3. **可靠性验证**
- 系统能够处理 API 调用失败和重试
- 详细记录错误信息,便于排查问题
- 支持任务状态查询和管理
## 视觉锚点
### Visual Reference
- [Authentication.canvas](../../Authentication.canvas) - 项目架构图
### Status
- [x] Draft
- [ ] Accepted
- [ ] Superceded
## 参考资料
1. [Salesforce Metadata API Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/api_meta_intro.htm)
2. [Salesforce Metadata API - retrieve() 方法详解](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_retrieve.htm)
3. [Salesforce Metadata API - deploy() 方法详解](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_deploy.htm)
4. [DeployOptions 对象参考](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_deploy_deployoptions.htm)
5. [DeployResult 对象参考](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_deploy_deployresult.htm)
6. [Quick Deploy (快速部署) 官方说明](https://help.salesforce.com/s/articleView?id=sf.deploy_quick_deployment.htm&type=5)
7. [Destructive Changes (删除元数据)](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_destructive_changes.htm)
8. [Testing and Code Coverage (单元测试要求)](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_deploy_testing.htm)