2

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

Order 和 Buyer 是 Ordering 服务中的两个聚合根。当用户签出购物篮时:

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

  2. 它在 Ordering 服务中的处理程序被调用。

  3. 在这个处理程序中,创建并分派了一个 CreateOrderCommand。

  4. 命令处理程序实例化一个“订单”。

  5. 结果,引发了域事件“OrderStartedDomainEvent”。

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

所以,在这种情况下,我想改变订单状态。更改订单状态需要命令。我应该在哪里发送这个命令?从我目前阅读的内容来看,在domain event handler中创建和调度命令是不合适的。

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

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

4

1 回答 1

1

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

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

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

于 2019-12-15T14:45:12.473 回答