我有几个不同的有界上下文在域中。 CRUD 操作的验证是在每个限界上下文中构建的。
例如,我可以仅当创建者是组长时才创建名为 GAME 的实体.
在这个例子中我有两个有界上下文(BC)。其一是Game BC另一个是User BC。为了解决这个问题,在Game BC,我必须进行域服务调用,例如IsGroupLeader() to the User BC在继续创建游戏之前。
我认为 DDD 不推荐这种类型的通信。我可以有一个用户实体也在Game BC,但我不想,因为同样用户实体在不同的 BC 的不同上下文中使用不同的方式。
我的问题是:
我应该使用域事件吗Game BC必须发送一个事件到User BC询问用户状态?通过这种方法,我不会像这样进行同步调用是组长但有一个事件叫做is_group_leader。然后Game BC必须等待User BC处理事件并返回状态。只有在User BC处理完事件后,Game BC才会创建Game实体。
CQRS 可以解决我的问题吗?
任何想法表示赞赏。
集成 BC 时,您有几种选择。不鼓励呼叫外部 BC 的原因是它要求两个 BC 同时运行。然而,这通常是可以接受的,并且比替代方案更简单。另一种方法是让游戏 BC 订阅来自用户 BC 的事件并保留其所需数据的本地副本,在本例中是有关用户是否是组长的信息。这样,当Game BC需要判断用户是否为组长时,不需要调用User BC,只需读取本地存储的数据即可。此次的挑战事件驱动 http://en.wikipedia.org/wiki/Event-driven_architecture另一种方法是同步事件。您必须确保游戏 BC 收到来自用户 BC 的所有适当事件。另一个挑战是处理最终一致性 http://en.wikipedia.org/wiki/Eventual_consistency,因为 BC 在任何给定时间点可能会稍微不同步。
CQRS 与这个问题有些正交。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)