上下文:我正在开发的产品正在从单体架构转向模块化单体架构,并在此过程中实现DDD概念,以及更受事件驱动的架构。
问题:许多操作都是面向集的(即它们接受一组Items
而不是单个CCD_1(。据我所知,这违反了";每个交易一个总变化";,然而Vaughn Vernon在IDDD(第367/368页(中提到UI方便性,允许用户创建批量聚合";(转述(是";可接受的理由";打破这个规则。没有提到相应的事件会是什么样子。
问题:在这种特殊情况下,将所有ItemCreated
事件批处理为单个ItemsCreated
事件(复数与单数(,并将所有单个事件作为有效载荷,这是否正确
因此,如果用户一次创建10个Items
,而不是10个ItemCreated
(单数(事件,则我将拥有一个单独的ItemsCreated
(复数(事件,并引用10个CCD-7。
其他注意事项:我知道域事件是由聚合发出的,因此事件发出命令和域事件之间应该有1:1的匹配。我不确定事件的批处理是否可以在聚合之外完成。
我知道域事件是由聚合发出的,因此,事件发出命令和域事件之间应该有1:1的匹配。
有很多人强烈地认为;交易";应该必然意味着一个";事件";。我和他们中的一些人争论过。它们并不特别令人信服;但显然我也不是。
1:1很简单,但你必须小心那些在其他地方为简单而更复杂的情况。
在这种特殊情况下,将所有ItemCreated事件批处理在单个ItemsCreated事件中(复数与单数(,并将所有单个事件作为有效负载是否正确?
可能是(但我猜不会(。
我认为你应该更仔细地研究情况的细微差别——在你正在建模的业务领域内,这真的是一件正在发生的事情,还是因为它们是一起交付的,所以10件不同的事情碰巧在时间上重合?
每个关心这一套中某一项的人都一定关心所有这些吗?
如果要实现";创建10〃;作为两个不同的";创建5〃;s、 这需要一个活动吗?两个事件?10个活动?
事实上,你认为这是10个不同的集合(而不是一个包含10个不同实体的集合(,这表明我们确实有10种不同的创造行为值得企业关注。