从概念上讲,我理解Translation和AntiCorruption 层之间的区别,但就实现而言,两者之间的区别在于Translation 层我们没有Facade,也没有位于Translation 层内的 Service(s),我们也没有有一个适配器,而是域代码本身(驻留在有界上下文中)调用一个翻译器?
一个。如果外部系统 ES实际上是另一个应用程序的一部分,并通过其应用程序层并直接从其域层提供功能(我们的有界上下文 BC需要),那么我们的BC应该如何请求它需要的服务?通过与ES 的应用层通信还是通过(通过翻译/反腐败层)与ES 的域层通信?
湾。为什么当我们的BC通过ES 的应用层请求功能时,不需要Translation/AntiCorruption 层,因为它通过ES 的应用层接收到的数据仍然需要翻译成领域概念?
C。如果ES实际上是我们自己的应用程序的一部分,那么我认为唯一的选择是让我们的 BC通过翻译/反腐败层“直接”与ES 的 域层通信来请求功能?
问问题
621 次
1 回答
3
- 翻译是 ACL 所做的。这些不是单独的概念。可以通过多种方式实现。重点是保护您的域免受外部系统的影响。ACL 通过将外部系统的模型转换为您的本地域模型来实现这一点。
2a. 本地 BC 应该通过应用程序服务或通过开放主机服务(基本上是一种 Web 服务)与外部 BC 通信。前一种方法只有在您同时开发两个 BC 并且您拥有实现两者的直接库时才可行。后者适用于 3rd 方 BC 或完全被服务封装的 BC。
2b。这仍然需要发生,除非两个 BC 是串联开发的并且具有共享内核。但是,我不是共享内核的忠实拥护者。
2c。你的 BC 仍然需要通过 ES 的应用服务与 ES 进行通信。它永远不应该直接进入域对象。更好的是,让 BC 调用的 Web 服务公开 ES 功能。
于 2013-02-21T23:38:20.303 回答