我想到了关于CQRS和DDD的简单场景,但我无法找到实现它的正确方法:
订单和买家是订购服务中的两个聚合根。当用户签出购物篮时:
-
在(篮(服务中引发集成事件。
-
它是排序服务中的处理程序被调用。
-
在此处理程序中,创建并调度 CreateOrderCommand。
-
命令处理程序实例化"订单"。
-
结果,域事件被引发"OrderStartedDomainEvent"。
-
在其处理程序中,必须应用有关其他聚合(例如买方(的副作用:买方被实例化(如果尚不存在(。
因此,在此方案之后,我想更改订单状态。更改订单状态需要命令。我应该在哪里调度此命令?从我目前所读到的内容来看,在域事件处理程序中创建和调度命令是不合适的。
另外,如果我需要在此处引发域事件,我该怎么做?由于买方构造函数可能不会被调用(如果它已经存在(。那么,在域事件处理程序中引发域事件是否正确?
我搜索了很多,但以前的答案对我来说太复杂了。如果有人澄清,我将不胜感激。提前谢谢。
从我目前阅读的内容来看,在域事件处理程序中创建和调度命令是不合适的。
您可能会调度来自应用程序事件处理程序的消息。 域模型在内存簿记中是纯的;应用层/组件负责将信息从一个地方移动到另一个地方。
考虑这种设计的一种方法是,应用程序处理程序正在多个组件之间编排消息,其中一个组件恰好是域模型。