我在域中有几个不同的边界上下文。 CRUD操作的验证内置在每个有界的上下文中。
例如,我创建一个名为GAME的实体,只有创建它的人是组长。
在这个例子中,我有两个边界上下文(BC)。一个是BC游戏,另一个是用户BC。为了解决这个问题,在BC游戏中,在开始创建Game之前,我必须像UserGroupLeader()一样进行域名服务调用。
我不认为这种类型的通信是由DDD推荐的。我可以在游戏BC中有一个用户实体,但是我不想,因为在不同的BC不同的上下文中,同一个用户实体被不同地使用。
我的问题是:
>我应该使用游戏BC必须向用户BC发送事件的域事件询问用户的状态吗?使用这种方法,我不会像IsGroupLeader一样进行同步调用,而是调用is_group_leader的事件。然后,BC游戏必须等待用户BC处理该事件并返回状态。游戏BC将在用户BC处理事件之后创建游戏实体。
CQRS是解决我的问题吗?
任何想法赞赏
当集成BC时,您有几个选择。呼吁外部BC的原因是不鼓励的,因为它要求两个BC同时运行。然而,这通常是可以接受的,并且比替代方法更简单。一个替代方案是让游戏BC订阅来自用户BC的事件,并保留其需要的数据的本地副本,在这种情况下,这是关于用户是否是组长的信息。以这种方式,当游戏BC需要确定用户是否是组长时,它不需要调用到用户BC,它只读本地存储的数据。这个
event-driven的挑战是同步事件。你有确保BC游戏从用户BC收到所有适当的事件。另一个挑战是处理
eventual consistency,因为BC可能在任何给定的时间点略微不同步。
原文链接:https://www.f2er.com/javaschema/282248.htmlCQRS与这个问题有些正交。