我正在从纯 DDD 范式转向 CQRS。我目前关心的是 Event Sourcing,更具体地说,是组织 Event Store。我已经阅读了大量的博客文章,但仍然无法理解某些内容。如果我错了,请纠正我。
每个事件基本上包括: - 事件日期/时间 - 事件类型(我们也可以从中找出 AggregateRoot 的类型) - AggregateRoot id (Guid) - AggregateRoot 版本(维护更新顺序) - 事件数据(一些具有更新所需数据的序列化类)
现在,如果我的事件数据由简单的值类型(整数、字符串、枚举等)组成,那么这很容易。但是如果我必须通过另一个 AggregateRoot 怎么办?我不能将整个 AR 序列化为事件数据的一部分(想想所有数据和延迟加载),基本上我只需要存储那个 AR 的 Id。但是,当我需要应用该事件时,我需要先从数据库中获取该 AR。而且从我的域模型(调用存储库和使用 AR Id)中这样做感觉不对。
最好的方法是什么?
ps 对于一个具体的例子,我们假设有一个模型,它由任务和用户实体(都是 AR)组成。任务持有对用户负责人的引用。但是可以更改负责的用户。
更新: 我想我找到了困惑的根源。我相信事件溯源应该只用于构建读取模型。在这种情况下,传递 ID 和原始数据是可以的。但是聚合本身使用的相同事件。这是我无法理解的。