发出命令创建 N 个相同类型的事件
Issuing Commands to create N of the same type of event
在我的事件溯源模型中,我有一个以仓库为模型的聚合。为此,我发出了 CreateBox
和 ChangeBoxLocation
.
这样的命令
通过 CreateBox
命令,我实现了它,使其与事件具有 1:n 关系。也就是说,一个有效的 CreateBox
命令将派发两个事件:BoxCreated
和 BoxLocationChanged
,因为添加的框应该移动到一个位置。
我注意到系统的用户实际上是批量向系统添加盒子。例如,可能有 300 个相同类型的箱子进来,他们会一次将这些全部扫描到系统中(而不是单独扫描一个)。
这让我产生了实施 CreateBoxesInBulk
命令的想法,如果该命令有效,将分派 BoxCreated
和 BoxLocationChanged
N 次,其中 N 是批量扫描的框数。
我的问题很简单,这是一种有效的方法吗?
另外:这会导致哪些潜在的并发症?我认为复杂性可能会受到此命令的影响,也许对聚合实施快照优化会有所帮助。
is this a valid approach?
是的 - 从单个命令派生 N 个事件没有错。
What potential complications could this cause?
找出正确的事件分组。
将 N 个事件写入单个 document/stream 通常没问题。
将N个事件写入N个documents/streams就可以了,如果你能把每个事件的写入当作一个独立的东西(没有要维护的不变量,或者如果丢掉那些事件也可以)不符合自己个别文档的不变量)。
试图将N个不同文档的不变量作为一个集合来管理;那很痛苦。发生数据竞争,除了最后一个事件之外的所有事件都可以正确写入。现在怎么办?
在我的事件溯源模型中,我有一个以仓库为模型的聚合。为此,我发出了 CreateBox
和 ChangeBoxLocation
.
通过 CreateBox
命令,我实现了它,使其与事件具有 1:n 关系。也就是说,一个有效的 CreateBox
命令将派发两个事件:BoxCreated
和 BoxLocationChanged
,因为添加的框应该移动到一个位置。
我注意到系统的用户实际上是批量向系统添加盒子。例如,可能有 300 个相同类型的箱子进来,他们会一次将这些全部扫描到系统中(而不是单独扫描一个)。
这让我产生了实施 CreateBoxesInBulk
命令的想法,如果该命令有效,将分派 BoxCreated
和 BoxLocationChanged
N 次,其中 N 是批量扫描的框数。
我的问题很简单,这是一种有效的方法吗?
另外:这会导致哪些潜在的并发症?我认为复杂性可能会受到此命令的影响,也许对聚合实施快照优化会有所帮助。
is this a valid approach?
是的 - 从单个命令派生 N 个事件没有错。
What potential complications could this cause?
找出正确的事件分组。
将 N 个事件写入单个 document/stream 通常没问题。
将N个事件写入N个documents/streams就可以了,如果你能把每个事件的写入当作一个独立的东西(没有要维护的不变量,或者如果丢掉那些事件也可以)不符合自己个别文档的不变量)。
试图将N个不同文档的不变量作为一个集合来管理;那很痛苦。发生数据竞争,除了最后一个事件之外的所有事件都可以正确写入。现在怎么办?