在 CQRS 中的域事件处理程序中创建命令



我想到了关于CQRS和DDD的简单场景,但我无法找到实现它的正确方法:

订单和买家是订购服务中的两个聚合根。当用户签出购物篮时:

  1. 在(篮(服务中引发集成事件

  2. 它是排序服务中的处理程序被调用。

  3. 在此处理程序中,创建并调度 CreateOrderCommand。

  4. 命令处理程序实例化"订单"。

  5. 结果,域事件被引发"OrderStartedDomainEvent"。

  6. 在其处理程序中,必须应用有关其他聚合(例如买方(的副作用:买方被实例化(如果尚不存在(。

因此,在此方案之后,我想更改订单状态。更改订单状态需要命令。我应该在哪里调度此命令?从我目前所读到的内容来看,在域事件处理程序中创建和调度命令是不合适的。

另外,如果我需要在此处引发域事件,我该怎么做?由于买方构造函数可能不会被调用(如果它已经存在(。那么,在域事件处理程序中引发域事件是否正确?

我搜索了很多,但以前的答案对我来说太复杂了。如果有人澄清,我将不胜感激。提前谢谢。

从我目前阅读的内容来看,在域事件处理程序中创建和调度命令是不合适的。

您可能会调度来自应用程序事件处理程序的消息。 域模型在内存簿记中是纯的;应用层/组件负责将信息从一个地方移动到另一个地方。

考虑这种设计的一种方法是,应用程序处理程序正在多个组件之间编排消息,其中一个组件恰好是域模型。

最新更新