防腐层和适配器之间有什么区别?

What's the difference between Anti-Corruption Layer and Adapters?

提问人:NullReferenceException 提问时间:9/5/2023 最后编辑:Peter CsalaNullReferenceException 更新时间:9/5/2023 访问量:145

问:

即使认为这里有一个很好的答案,解释仍然让我有点困惑。

我没有看到反腐败层和适配器之间有任何巨大的差异,我看到的唯一区别是定义上的差异,即反腐败层是一种包装器,允许您将自己的域与其他域的损坏隔离开来。

但在另一篇文章中,反腐败层通常充当适配器。

让我们举个例子。我有一个库,允许我从代码中查询 MongoDB,由官方 MongoDB 开发人员为我的编程语言开发。我还有一个用户域模型(让我们命名它)。用户具有唯一的 UserID,该 ID 必须与 MongoDB 中的 ID 匹配。MongoDB 库使用标识符类型。因为我不想从域模型中引用数据库的类型,所以我创建了一个单独的类型,它实际上是一个常规字符串。因此,在域模型中,UserID 的类型为 ,并且其本身将在映射期间通过转换为字符串进行转换。Userprimitive.ObjectIDIdentifierIdentifierprimitive.ObjectIDIdentifier

问题:在这种情况下,是反腐败层吗?是否有任何示例可以最准确地向我展示防腐层和适配器模式之间的区别?Identifier

我阅读了以下文章:123,但我认为它们都没有用。

模式 架构 领域驱动设计 适配器 防损坏层

评论


答:

0赞 Peter Csala 9/5/2023 #1

防腐层

由以下部分组成

  • 适配器:它使一个接口适应另一个接口
  • Facade:调用方和目标之间的接口
  • 翻译器:它将一种数据结构转换为另一种数据结构

从旧版到新版的数据流

  1. 适配器知道旧系统应该如何调用外观上的方法
  2. Facade 知道如何将旧系统的请求映射到新系统的请求
  3. 转换器知道如何将旧系统的实体转换为新系统的实体

从新版到版的数据流

  1. 适配器知道新系统应该如何调用外观上的方法
  2. 外观知道如何将新系统的响应映射到旧系统的响应
  3. 转换器知道如何将新系统的实体转换为旧系统的实体

如您所见,流程完全相同。您可以这样考虑组件:

  • 适配器将系统 X 工作流映射到系统 Y
  • Facade 将单个系统 X 方法映射到系统 Y
  • 转换器将参数和返回类型从系统 X 映射到系统 Y,反之亦然

由于这些组件倾向于一起使用,因此有时所有这些组件都会被分解为单个组件,并且通常将其命名为适配器。恕我直言,拥有更小、更集中的组件是一种更好的方法。