反腐败层和适配器有什么区别?

问题描述 投票:0回答:1

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

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

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

举个例子。我有一个库,允许我从代码中查询 MongoDB,该库是由官方 MongoDB 开发人员为我的编程语言开发的。我还有一个用户域模型(让我们将其命名为

User
)。 User 有一个唯一的 UserID,它必须与 MongoDB 中的 ID 匹配。 MongoDB 库使用
primitive.ObjectID
类型作为标识符。因为我不想从域模型引用数据库的类型,所以我创建了一个单独的类型
Identifier
,它实际上是一个常规字符串。因此,在域模型中,UserID 将是
Identifier
类型,并且
primitive.ObjectID
本身将在映射期间通过转换为字符串而转换为
Identifier

问题:这样的话,

Identifier
是反腐层吗?您有什么例子可以最准确地向我展示反腐败层和适配器模式之间的区别吗?

我已阅读以下文章:123,但我觉得它们都没有用。

design-patterns architecture domain-driven-design adapter anti-corruption-layer
1个回答
0
投票

反腐败层

组成
  • 适配器:它将一个接口适配到另一个接口
  • Facade:调用者和目标之间的接口
  • 转换器:它将一种数据结构转换为另一种数据结构

从旧版到新版的数据流

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

从新到旧的数据流

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

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

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

因为这些组件往往一起使用,所以有时所有这些组件都会被整合到一个组件中,并且通常将其命名为(badly)适配器。恕我直言,拥有更小、更集中的组件是更好的方法。

© www.soinside.com 2019 - 2024. All rights reserved.