处理需要来自另一个限界上下文的数据的用例的良好实践

Good practice to handle a use case requiring data from another bounded context

我的软件是一种社交网络,除其他功能外,成员可以在其中安排他们之间的一些会议。

我选择出现这三个限界上下文 (DDD):

基本上,在 MeetingsContext 中,会议的创建用例需要一个成员列表(以便邀请其中的一些人),基本上是通过用户选择一些成员的 Web 表单成员展示了一些有趣但轻松的社交信息。

如您所想,SocialContext 显然是社交方式中会员数据的掌握者。

我是否应该在 SocialContext 中创建一种 Open Host Service 返回用例的一些相关成员数据?

它将由 MeetingsContext 直接使用(REST 协议),如果需要,可能会通过 Anti-Corruption 层使用。

或者我应该在 MeetingsContext 中缓存甚至复制相关成员的数据以改进它的 self-contained 方面

使用缓存解决方案,缓存将以最终一致性的方式同步。

在这种情况下,什么是好的做法?

视情况而定,但我会使用反腐败层 (ACL) 来分隔三个限界上下文。

关于缓存的使用:你可以使用它;这与 ACL 正交。 ACL 可以通过缓存进行修饰以加快处理速度,或者它本身可以是本地持久性,用于保存远程数据的本地副本。

关于最终一致性:当然你会在有界上下文之间有最终一致性,你的设计必须考虑到这一点。

Basically, in the MeetingsContext, the meeting's creation use case demands a list of members (in order to invite some of them), basically through a Web form where user selects some members presenting some interesting but light social information.

UI可能是一个特例,它结合了来自更多有界上下文的数据;不要让 UI 模糊限界上下文之间的明确区分。

复合 UI 在这些情况下是一个不错的选择。您的会议上下文只需要知道成员 ID 以及可能有关他们的通信偏好的一些信息就可以建立会议。

编写参与者列表不需要会议上下文参与。这个 UI 元素很可能来自社交上下文 UI,然后在选择完成后将参与者 ID 列表发送到会议上下文。

一般规则是为了在屏幕上显示一些内容,避免上下文之间的数据传输。负责任的上下文应该这样做。

参考资料如下: