准备View Model时如何"加入"两个聚合根?

Dmi*_*ich 13 cqrs event-sourcing

假设BookAuthor是在我的模型总根源.

在阅读模型中,我有一个表格AuthorsAndBooks,其中列出了作者和书籍Book.AuthorId

BookAdded事件被触发时,我想要接收Author数据以创建新AuthorsAndBooks行.

因为Book是聚合根,所以有关信息Author不包含在BookAdded事件中.我不能包括它,因为Authorroot没有getter(根据所有关于CQRS和Event Sourcing的示例和帖子的指南).

通常我会在这个问题上收到两种答案:

  1. 使用事件处理程序中所需的所有数据丰富您的域事件.但正如我所说,我不能为Aggregates Roots做这件事.
  2. 使用View Model中的可用数据.即Author从View Model 加载并使用它来构建AuthorsAndBooks行.

最后一个在并发方面存在一些问题.BookAdded处理事件时,视图模型中无法使用作者数据.

你用什么方法来解决这个问题?谢谢.

Yve*_*out 2

作为一般建议,让事件处理程序具有幂等性,并确保您可以处理无序消息处理(通过重新排队或构建机制来填充丢失的数据)。另一方面,要质疑为什么作者和书籍是如此绝望的聚合根源。也许你应该在添加一本书时从作者那里复制(f * 是什么“添加一本书”,这是一个命令)。问题在于所有这些编造的例子。下降到现实世界,我怀疑你的问题是否存在。