在ES + CQRS + DDD中,事件是否可以根本不更新任何真实域状态?

And*_*ita 5 domain-driven-design cqrs event-sourcing

是否可以在事件流中包含不影响域状态中任何聚合的事件?

举个例如AllCompletedTodosPurged之类的事件,除了通过删除所有已完成的待办事项来更改具有活动待办事项的读取模型.

Mik*_*eSW 1

不,这样不行。当聚合状态发生变化时,会生成域事件。如果没有任何变化,则没有域事件。

您也可以使用域外的事件,但它们不会是域的一部分,显然也不是事件流的一部分。

在您的场景中,如果事件不是由于聚合更改而生成的,为什么它应该包含在任何聚合中?从技术上讲,如果该事件不属于任何内容,您将在哪个事件流中添加该事件?您会为所有涉及的待办事项添加该事件吗?这个不成立。

我不确定清除是否是您域的一部分,但如果是,则意味着所有已完成的待办事项都已“删除”,即每个涉及的聚合已ToDoDeleted在其集合中包含该事件。AllCompletedTodosPurged只是一个对更新读取模型有用的事件,但仅此而已。它不应该影响域模型。