6.2 KiB
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 系统配置信息
理由:
- 集中存储所有 Salesforce 系统配置,便于统一管理
- 支持多系统配置,满足业务需求
- 使用独立的表存储,避免与其他业务表耦合
影响:
- 需要创建新的数据库表
- 需要创建对应的 Mapper 和 XML 文件
- 需要创建对应的实体类、DTO、VO
决策 2:敏感信息加密策略
决策内容:使用 EncryptUtils 对密码、安全令牌、OAuth 客户端密钥等敏感信息进行加密存储
理由:
- 保护用户敏感信息,提高系统安全性
- 符合项目现有的加密规范
EncryptUtils已经在项目中广泛使用,成熟可靠
影响:
- 需要在 Service 层实现加密/解密逻辑
- 需要在读取配置时自动解密
- 需要在保存配置时自动加密
决策 3:系统类型自定义策略
决策内容:系统类型(system_type)使用自由文本字段,不限制为固定值
理由:
- 支持用户自定义系统类型,提高灵活性
- 不限制用户的使用场景
- 满足"用户自定义系统类型"的业务需求
影响:
- 系统类型字段使用 VARCHAR 类型
- 不需要创建枚举或字典表
- 前端需要提供自由输入框
决策 4:源目标区分策略
决策内容:使用 org_type 字段(CHAR 类型)区分源 org 和目标 org,支持同一系统既是源 org 又是目标 org
理由:
- 使用单个字段存储,简化数据模型
- 支持 S(源 org)、T(目标 org)两种值
- 支持同一系统既是源 org 又是目标 org(通过业务逻辑实现)
影响:
- 需要在业务逻辑中处理 org_type 字段
- 需要提供源 org / 目标 org 的筛选查询
决策 5:系统配置管理策略
决策内容:系统配置变更无需审批流程,系统配置无权限限制
理由:
- 提高配置管理的灵活性
- 简化配置流程,提高用户体验
- 满足"系统配置变更无需审批流程,系统配置无权限限制"的业务需求
影响:
- 不需要实现审批流程
- 不需要实现权限控制
- 需要在 Controller 层直接调用 Service 层
决策 6:索引设计策略
决策内容:为关键字段创建索引,提高查询性能
理由:
- 提高查询性能,满足性能需求(系统列表查询响应时间 < 1 秒)
- 支持分页查询,避免全表扫描
- 支持按条件筛选查询
影响:
- 需要创建主键索引
- 需要创建唯一索引(system_name)
- 需要创建普通索引(system_type、org_type、login_type、status)
决策 7:接口设计策略
决策内容:提供 RESTful API 接口,支持 CRUD 操作和特殊查询
理由:
- 遵循 RESTful 设计规范
- 提供统一的接口风格
- 便于前端调用和集成
影响:
- 需要创建 Controller 层接口
- 需要创建 Service 层接口和实现
- 需要创建 Mapper 层接口和实现
决策 8:分层架构策略
决策内容:采用 Controller-Service-Mapper 三层架构
理由:
- 遵循项目现有的分层架构规范
- 实现业务逻辑与数据访问的分离
- 提高代码的可维护性和可测试性
影响:
- 需要创建 Controller 层
- 需要创建 Service 层接口和实现
- 需要创建 Mapper 层接口和 XML 文件
后果
正面影响
- 灵活性:支持用户自定义系统类型,不限制使用场景
- 安全性:敏感信息加密存储,保护用户数据
- 性能:合理的索引设计,提高查询性能
- 可维护性:清晰的分层架构,便于维护和扩展
- 易用性:无审批流程和权限限制,简化配置管理
负面影响
- 开发成本:需要创建多个层次的代码,开发成本较高
- 测试成本:需要编写单元测试和集成测试,测试成本较高
- 维护成本:需要维护多个层次的代码,维护成本较高
替代方案
替代方案 1:使用枚举限制系统类型
描述:使用枚举限制系统类型为固定值(production、sandbox、developer)
拒绝理由:
- 不满足"用户自定义系统类型"的业务需求
- 限制用户的使用场景
- 灵活性不足
替代方案 2:使用两个表分别存储源 org 和目标 org
描述:使用 datai_sf_source_org_config 和 datai_sf_target_org_config 两个表分别存储源 org 和目标 org
拒绝理由:
- 数据模型复杂,增加维护成本
- 不支持同一系统既是源 org 又是目标 org
- 查询逻辑复杂
替代方案 3:实现审批流程和权限控制
描述:实现审批流程和权限控制,限制系统配置的变更
拒绝理由:
- 不满足"系统配置变更无需审批流程,系统配置无权限限制"的业务需求
- 增加系统复杂度
- 降低用户体验
相关决策
- 无
相关需求
- 2026-01-21-003-01:Salesforce 多系统配置
相关设计
- 2026-01-21-003-01-salesforce-multi-system-config-design:Salesforce 多系统配置设计
实施计划
- 创建数据库表
datai_sf_system_config - 创建实体类
DataiSfSystemConfig - 创建 DTO 和 VO
- 创建 Mapper 接口和 XML 文件
- 创建 Service 接口和实现
- 创建 Controller 接口
- 编写单元测试
- 编写集成测试
- 进行代码审查
- 部署到测试环境