Domain driven design 在ES+;CQRS+;DDD,事件是否可以根本不更新任何实际域状态?

Domain driven design 在ES+;CQRS+;DDD,事件是否可以根本不更新任何实际域状态?,domain-driven-design,cqrs,event-sourcing,Domain Driven Design,Cqrs,Event Sourcing,在事件流中包含不影响域状态中任何聚合的事件可以吗 以AllCompletedToDospressed这样的事件为例,它只不过是通过删除所有已完成的TODO来更改具有活动TODO的读取模型。通过不影响聚合,我假设您指的是聚合类本身内部的私有变量?如果你的意思是别的,忽略这个答案 我发现,第一次实现ES的开发人员往往难以解决这个问题。第一次做端到端的参考实现时,我遇到了完全相同的问题 事实上,我惊讶地发现局部聚合状态并没有我想象的那么有用——这种状态几乎总是更自然地以投影读取模型的形式表示。您真正需

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


以AllCompletedToDospressed这样的事件为例,它只不过是通过删除所有已完成的TODO来更改具有活动TODO的读取模型。

通过不影响聚合,我假设您指的是聚合类本身内部的私有变量?如果你的意思是别的,忽略这个答案

我发现,第一次实现ES的开发人员往往难以解决这个问题。第一次做端到端的参考实现时,我遇到了完全相同的问题

事实上,我惊讶地发现局部聚合状态并没有我想象的那么有用——这种状态几乎总是更自然地以投影读取模型的形式表示。您真正需要本地状态的唯一时间是在需要处理单个事件时(例如用于验证)


所以我想说,不仅支持不改变本地聚合状态的事件是可以接受的,而且这些类型的事件可以说比改变本地状态的事件更常见。

不,这不好。聚合状态更改时将生成域事件。如果没有更改,则不存在域事件

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

在您的场景中,如果事件不是作为聚合更改的结果生成的,为什么它应该包含在任何聚合中?从技术上讲,如果该事件不属于任何内容,您将在哪个事件流中添加该事件?你会为所有涉及的TODO添加该事件吗?这毫无意义

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