Domain driven design 事件源中的副作用

Domain driven design 事件源中的副作用,domain-driven-design,cqrs,event-sourcing,Domain Driven Design,Cqrs,Event Sourcing,假设我有以下关系): 所有实体均实施以下签名: fun handleCommand(command: Command): List<Event> // returns a list of events that can be applied on itself fun handleEvent(event: Event): Entity // returns itself with the new event applied fun-handleCommand(command:com

假设我有以下关系):

所有实体均实施以下签名:

fun handleCommand(command: Command): List<Event> // returns a list of events that can be applied on itself
fun handleEvent(event: Event): Entity // returns itself with the new event applied
fun-handleCommand(command:command):List//返回可应用于自身的事件列表
fun handleEvent(event:event):实体//返回自身并应用新事件

在处理(比如)E4上的命令时,在逻辑上会对E2造成一些副作用(事件),最佳做法是什么?请注意,这不应与sagas混淆,但这是一个一般性的问题,即在处理子实体上的命令时,应如何产生对父实体的副作用。

这是聚合的要点。它将协调这一进程。外部代码将无法直接在E4上发出命令,因为它将被封装在聚合中。相反,该命令将被路由到聚合,聚合将在内部发出并协调该过程


希望这有帮助

这是一个聚合点。它将协调这一进程。外部代码将无法直接在E4上发出命令,因为它将被封装在聚合中。相反,该命令将被路由到聚合,聚合将在内部发出并协调该过程


希望能有所帮助

关于非琐碎集合的文献非常薄弱

当在E4上处理一个命令时,逻辑上应该会在E2上引起一些副作用(事件),最佳实践是什么

可能最需要注意的是:因果关系是业务逻辑的一部分,而不是状态的一部分。我们不需要考虑当我们整合事件时所有事物的全息关联性,因为其他事物被写在别处。

当我们从实体的历史记录中重新构建实体时,业务规则不再适用——每个实体状态都是独立地从自己的事件中派生出来的

因为这些实体都是同一聚合的一部分,所以它们的事件应该一起写入到单个事务中的单个持久存储中

因为实体状态在逻辑上彼此隔离,所以事件的顺序并不特别重要——实体行为是并发的。每个实体都应该以“正确”的顺序看到自己的事件,但这并不特别重要,因为实体E4是从E2之前或之后的事件中重新构建的


(单个实体中事件的顺序可能仍然相关。)

关于非平凡聚合的文献非常薄弱

当在E4上处理一个命令时,逻辑上应该会在E2上引起一些副作用(事件),最佳实践是什么

可能最需要注意的是:因果关系是业务逻辑的一部分,而不是状态的一部分。我们不需要考虑当我们整合事件时所有事物的全息关联性,因为其他事物被写在别处。

当我们从实体的历史记录中重新构建实体时,业务规则不再适用——每个实体状态都是独立地从自己的事件中派生出来的

因为这些实体都是同一聚合的一部分,所以它们的事件应该一起写入到单个事务中的单个持久存储中

因为实体状态在逻辑上彼此隔离,所以事件的顺序并不特别重要——实体行为是并发的。每个实体都应该以“正确”的顺序看到自己的事件,但这并不特别重要,因为实体E4是从E2之前或之后的事件中重新构建的

(单个实体中的事件顺序可能仍然相关。)

fun handleCommand(command: Command): List<Event> // returns a list of events that can be applied on itself
fun handleEvent(event: Event): Entity // returns itself with the new event applied