3

我有一个带有应用程序服务的有界上下文,它使用 DTO 公开应用程序用例。

有界上下文还包括一个域服务,它公开了具有丰富域对象的域用例。应用服务是领域服务的“客户”。

最后,允许域对象持久化的存储库。

域中存在其他有界上下文,并且拥有有界上下文的团队之间的关系是客户/供应商,因此团队对齐相同的目标,并且可以合作将所需的用例公开给其他有界上下文。

在这种情况下,“客户有界上下文”应该在哪里连接到“供应商有界上下文”?

“供应商有界上下文”可以直接访问存储库或公开“供应商有界上下文”的丰富域对象的域服务吗?(在“客户有界上下文”中使用 ACL 来保护“供应商有界上下文”免于在域中泄漏)。我不确定这种方法是否良好,因为域重构会破坏所有 ACL 并需要维护。我知道这是 ACL 的目标,但是......

或者“消费者有界上下文”是否最好只连接到“供应商有界上下文”的应用程序服务,其中公开 DTO?(不需要 ACL)。我不确定这种方法是否良好,因为它强制应用程序服务模仿域服务仅作为访问点,即使用例显然是域用例。

有什么意见吗?任何人都尝试过具有好/坏经验的两种方法之一?

我没有从 Vaughn Vernon 的书或 Scott Millett 的书中找到明确的答案。

4

1 回答 1

2

两个团队应合作为供应商 BC 定义 API。不要直接耦合到其他 BC 应用服务甚至模型。

API 通常被实现为 REST API,但从您的问题看来,您在一个应用程序中集成了多个 BC。如果是这种情况,那么您应该将 API 定义为接口库。

接口库应该被版本化和记录。它应该由供应商团队维护,消费者团队根据他们的需要提出更改请求。

如果供应商 BC 有一个非常简单的模型,则仅通过 API 公开域模型本身。在所有其他情况下,定义封装所需用例的应用服务是有意义的。然后,只有这些应用服务会作为 API 公开。

于 2016-06-14T12:37:18.050 回答