← [ BACK_TO_NOTES ]

防腐层

防腐层在系统或限界上下文之间翻译模型与语义,避免外部概念直接进入内部领域。

#growing #concept #dev

[!info] related notes

防腐层 Anti-Corruption Layer

防腐层(Anti-Corruption Layer,ACL)在内部模型与外部系统或另一限界上下文之间提供语义转换,避免内部业务被迫采用外部的概念、状态和规则。

这里的 ACL 不是网络安全中的 Access Control List。

翻译什么

内部领域 / 应用接口 ↔ 防腐层 ↔ 外部接口与模型
  • 概念:外部的用户、账户、交易在内部可能有不同职责。
  • 单位与表示:金额最小单位、币种、时间戳单位、时区与标识符。
  • 状态与错误:外部成功、处理中、拒绝、超时如何映射到内部可处理的结果。
  • 调用协议:认证、请求格式、重试约束等留在集成边界,业务仍需处理真实的失败和不确定性。

可以组合 Facade、Adapter、Translator 实现,也可以是一个小模块;不要求每个角色都创建独立类。

支付映射例子

假设外部接口明确定义 status_code=1 为已成功,0 为已失败,另有处理中状态,并使用整数最小货币单位:

外部证据内部处理
明确成功状态和交易 ID映射为成功结果,并保留可追踪 ID
明确失败状态映射为失败结果及可处理原因
处理中映射为待确认,不能直接视为成功或失败
未识别状态、缺字段、金额单位不符拒绝或记录为集成错误,不默认归为业务失败
请求超时标记结果未知并按协议查询或对账,不据此判定没有扣款

金额转换需明确币种与最小单位,避免用浮点数承载精确金额。创建支付意图或拿到一个 ID 不等于扣款成功;重复调用还需业务幂等约束。

这个例子描述转换责任,不是某个支付 SDK 的可执行实现。

使用边界

  • 适合模型差异明显、遗留系统或外部契约可能侵入内部模型的集成。
  • 简单字段转发、工具库包装和 Repository 不自动等于 DDD 防腐层;关键在于是否隔离了语义差异。
  • API Gateway 侧重统一流量入口,BFF 侧重客户端适配,ACL 侧重模型翻译;不能仅用“入口 / 出口方向相反”区分。
  • 可部署为模块或独立服务,取决于共享、扩缩容和运维需求。额外延迟与故障点需测量,不能预设可忽略。
  • ACL 降低变化传播,不保证外部改变业务语义后内部完全无需调整。

参考

创建于 2026/1/27 更新于 2026/10/6
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本