datai/docs/decisions/2026-01-21-003-01-ADR-salesforce-multi-system-config.md

6.2 KiB
Raw Blame History

ADR-003-01: Salesforce 多系统配置架构决策

元数据

  • ADR 编号ADR-003-01
  • 需求编号2026-01-21-003-01
  • 创建时间2026-01-21
  • 创建人SSOT 架构师
  • 状态:已采纳
  • 优先级:高

上下文

需要实现 Salesforce 多系统配置功能,支持配置多个不同类型的 Salesforce 系统,支持用户自定义系统类型,支持区分源 org 和目标 org支持同一系统既是源 org 又是目标 org支持配置系统名称、自定义类型、登录方式等支持启用/停用系统,系统配置变更无需审批流程,系统配置无权限限制,密码、安全令牌等敏感信息使用 EncryptUtils 加密存储。

决策

采用以下架构决策实现 Salesforce 多系统配置功能:

决策 1数据库表设计

决策内容:创建 datai_sf_system_config 表存储 Salesforce 系统配置信息

理由

  1. 集中存储所有 Salesforce 系统配置,便于统一管理
  2. 支持多系统配置,满足业务需求
  3. 使用独立的表存储,避免与其他业务表耦合

影响

  • 需要创建新的数据库表
  • 需要创建对应的 Mapper 和 XML 文件
  • 需要创建对应的实体类、DTO、VO

决策 2敏感信息加密策略

决策内容:使用 EncryptUtils 对密码、安全令牌、OAuth 客户端密钥等敏感信息进行加密存储

理由

  1. 保护用户敏感信息,提高系统安全性
  2. 符合项目现有的加密规范
  3. EncryptUtils 已经在项目中广泛使用,成熟可靠

影响

  • 需要在 Service 层实现加密/解密逻辑
  • 需要在读取配置时自动解密
  • 需要在保存配置时自动加密

决策 3系统类型自定义策略

决策内容系统类型system_type使用自由文本字段不限制为固定值

理由

  1. 支持用户自定义系统类型,提高灵活性
  2. 不限制用户的使用场景
  3. 满足"用户自定义系统类型"的业务需求

影响

  • 系统类型字段使用 VARCHAR 类型
  • 不需要创建枚举或字典表
  • 前端需要提供自由输入框

决策 4源目标区分策略

决策内容:使用 org_type 字段CHAR 类型)区分源 org 和目标 org支持同一系统既是源 org 又是目标 org

理由

  1. 使用单个字段存储,简化数据模型
  2. 支持 S源 org、T目标 org两种值
  3. 支持同一系统既是源 org 又是目标 org通过业务逻辑实现

影响

  • 需要在业务逻辑中处理 org_type 字段
  • 需要提供源 org / 目标 org 的筛选查询

决策 5系统配置管理策略

决策内容:系统配置变更无需审批流程,系统配置无权限限制

理由

  1. 提高配置管理的灵活性
  2. 简化配置流程,提高用户体验
  3. 满足"系统配置变更无需审批流程,系统配置无权限限制"的业务需求

影响

  • 不需要实现审批流程
  • 不需要实现权限控制
  • 需要在 Controller 层直接调用 Service 层

决策 6索引设计策略

决策内容:为关键字段创建索引,提高查询性能

理由

  1. 提高查询性能,满足性能需求(系统列表查询响应时间 < 1 秒)
  2. 支持分页查询,避免全表扫描
  3. 支持按条件筛选查询

影响

  • 需要创建主键索引
  • 需要创建唯一索引system_name
  • 需要创建普通索引system_type、org_type、login_type、status

决策 7接口设计策略

决策内容:提供 RESTful API 接口,支持 CRUD 操作和特殊查询

理由

  1. 遵循 RESTful 设计规范
  2. 提供统一的接口风格
  3. 便于前端调用和集成

影响

  • 需要创建 Controller 层接口
  • 需要创建 Service 层接口和实现
  • 需要创建 Mapper 层接口和实现

决策 8分层架构策略

决策内容:采用 Controller-Service-Mapper 三层架构

理由

  1. 遵循项目现有的分层架构规范
  2. 实现业务逻辑与数据访问的分离
  3. 提高代码的可维护性和可测试性

影响

  • 需要创建 Controller 层
  • 需要创建 Service 层接口和实现
  • 需要创建 Mapper 层接口和 XML 文件

后果

正面影响

  1. 灵活性:支持用户自定义系统类型,不限制使用场景
  2. 安全性:敏感信息加密存储,保护用户数据
  3. 性能:合理的索引设计,提高查询性能
  4. 可维护性:清晰的分层架构,便于维护和扩展
  5. 易用性:无审批流程和权限限制,简化配置管理

负面影响

  1. 开发成本:需要创建多个层次的代码,开发成本较高
  2. 测试成本:需要编写单元测试和集成测试,测试成本较高
  3. 维护成本:需要维护多个层次的代码,维护成本较高

替代方案

替代方案 1使用枚举限制系统类型

描述使用枚举限制系统类型为固定值production、sandbox、developer

拒绝理由

  1. 不满足"用户自定义系统类型"的业务需求
  2. 限制用户的使用场景
  3. 灵活性不足

替代方案 2使用两个表分别存储源 org 和目标 org

描述:使用 datai_sf_source_org_configdatai_sf_target_org_config 两个表分别存储源 org 和目标 org

拒绝理由

  1. 数据模型复杂,增加维护成本
  2. 不支持同一系统既是源 org 又是目标 org
  3. 查询逻辑复杂

替代方案 3实现审批流程和权限控制

描述:实现审批流程和权限控制,限制系统配置的变更

拒绝理由

  1. 不满足"系统配置变更无需审批流程,系统配置无权限限制"的业务需求
  2. 增加系统复杂度
  3. 降低用户体验

相关决策

相关需求

  • 2026-01-21-003-01Salesforce 多系统配置

相关设计

  • 2026-01-21-003-01-salesforce-multi-system-config-designSalesforce 多系统配置设计

实施计划

  1. 创建数据库表 datai_sf_system_config
  2. 创建实体类 DataiSfSystemConfig
  3. 创建 DTO 和 VO
  4. 创建 Mapper 接口和 XML 文件
  5. 创建 Service 接口和实现
  6. 创建 Controller 接口
  7. 编写单元测试
  8. 编写集成测试
  9. 进行代码审查
  10. 部署到测试环境