从概念上讲,我理解翻译和 AntiCorruption图层之间的区别,但就实现而言,两者之间的区别是翻译层我们没有 Facade ,也没有服务驻留在翻译层中,我们也没有适配器,而是域代码本身(驻留在 Bounded Context 中)调用 Translator ?
< / LI>一个。如果外部系统 ES 实际上是另一个应用程序的一部分并提供功能(我们的有界上下文 BC 需要)通过其应用层并直接来自其域层,我们的 BC 应如何请求所需的服务?通过与 ES的 应用层进行通信,或通过 ES的 域进行通信(通过 Translation / AntiCorruption层em>)层
湾当 BC 通过 ES 应用层请求功能时,为什么还不需要翻译/ AntiCorruption层em>,因为通过 ES 应用层接收的数据仍然需要转换为域概念?
℃。如果 ES 实际上是我们自己的应用程序的一部分,那么我假设只有我们的 BC 的选项才能请求通过 Translation / AntiCorruption图层“直接”与 ES的 域图层进行通信?
答案 0 :(得分:3)
2a上。本地BC应该通过应用服务或通过开放主机服务与外部BC通信,该服务基本上是Web服务。前两种方法只有在两个BC同时开发并且您有直接库来实现两者时才可行。后者适用于由服务完全封装的第三方BC或BC。
2B。这仍然需要发生,除非两个BC是串联开发并具有共享内核。然而,我不是共享内核的忠实粉丝。
2c中。您的BC仍需要通过ES的应用程序服务与ES进行通信。它永远不应该直接转到域对象。更好的是,通过BC可以调用的Web服务公开ES功能。