The*_*Mar 13 cqrs domain-events
CQRS让我进入思维模式.我正在尝试用CQRS创意开始一个新项目.我喜欢的主要内容是
1)Query和Command的分离.我们的域查询一直是个问题.
2)使用事件存储进行审计 - 我不会将其用于重播 - 至少现在不是.
我很擅长查询方面,我仍然对域事件有一些疑问
如果一个命令导致多个聚合根(例如订单和订单详细信息)的更新,我将把它们限定在UnitofWork(事务性)下.现在,每个域负责在更改发生到其状态时发布事件.
让我们说该命令更改3 orderDetail记录.每个OrderDetail将发布2个事件.最后我们有6个活动.
a)如果我在对域对象进行更改(但未提交事务)后立即发布事件,如何撤消已发布的事件(并且可能已被订阅者使用)
b)如果OrderDetail中的更改要求在Order Aggregate Root中进行某些更改,那么
i)我应该通过处理OrderDetail Aggregate发布的事件来进行这些更改吗?对于前者 让我们说两个订单明细被删除.这使订单状态从"首选"变为"不首选".ii)如果事件错误并且没有更新订单状态怎么办 - 如果订单仍然是首选,那么它将在2天内发货.
添加另一个问题
c)"域事件是所有应用程序状态更改的来源"还是"所有应用程序状态更改的结果"
先感谢您,
三月
rou*_*sis 10
a)在提交事务之前,不应发布事件,事件代理已发生事件,因此它们都以传递时序命名(例如OrderClearedEvent).此外,如果您必须"恢复"某个事件,您应该采取纠正措施,即您不要删除该事件,您必须触发一个新事件来纠正您要还原的事件的影响
b)对于你如何为实体建模并命令其他任何东西,这似乎更成问题.我不能想到OrderDetail会成为AggregateRoot的原因,但我不知道你的域名......
c)命令将导致至少发布一个事件
希望这会有所帮助:)正如Rinat所说,google小组是提问的最佳地点,也可以查看cqrsinfo.com以及github.com/MarkNijhof/Fohjin和github.com/gregoryyoung/mr的示例代码