发出命令以创建N个相同类型的事件

时间:2018-07-09 20:29:01

标签: architecture domain-driven-design cqrs event-sourcing

在事件采购模型中,我有一个以仓库为模型的汇总模型。为此,我发出了诸如CreateBoxChangeBoxLocation之类的命令。

我使用CreateBox命令实现了它,使其与事件之间具有 1:n 关系。也就是说,有效的CreateBox命令将调度两个事件:BoxCreatedBoxLocationChanged,因为应该将添加的框移动到某个位置。

我注意到系统的用户实际上向系统中批量添加了盒子。例如,可能会放入300个相同类型的盒子,它们会一次将所有这些盒子扫描到系统中(而不是分别扫描每个盒子)。

这使我想到了执行CreateBoxesInBulk命令的想法,该命令如果有效,将分派BoxCreatedBoxLocationChanged N次,其中N是批量扫描的箱子数。

我的问题很简单,这是一种有效的方法吗?

另外:这可能导致哪些潜在的并发症?我认为此命令可能会影响复杂性,也许对聚合实施快照优化将是有益的。

1 个答案:

答案 0 :(得分:1)

  

这是有效的方法吗?

是的-从单个命令派生N个事件没有错。

  

这可能导致哪些潜在的并发症?

弄清楚事件的正确分组。

将N个事件写到单个文档/流中通常没问题。

将N个事件写入N个文档/流中就可以了,如果您可以将每个事件的写入视为独立的事情(没有要维护的不变性,或者可以丢失与事件无关的事件也可以)自己的个人文档不变)。

尝试将N个不同文档的不变性作为一个集合进行管理;那很痛苦。发生数据争用,并且除最后一个事件外的所有事件都可以正确写入。现在呢?