依赖读模型构建其他读模型

Depending on read models to build other read model

我想知道使用其他读取模型来更新我的特定读取模型是否被认为是好的做法。例如,有两个聚合根:用户和报告。要构建报告查询,我需要用户的当前状态,并且我已经阅读了为我提供该信息的模型。我可以使用它还是应该仅根据事件(来自不同聚合)重建我的查询?

我在这种方法中看到的一个问题是,我可能希望在这些报告中让用户处于过去特定日期的状态。当然,我遗漏了保持阅读最新的问题。

也许我可以建立支持用户table 来查询报告?

答案取决于您希望 read-models 的解耦程度。

  1. 如果你想要一种微服务类型的解耦(松散的),报告 read-model 应该只依赖于用户 AR 生成的事件;在这种情况下,您必须创建另一个 read-model,它仅捕获来自用户 AR(UserWasCreated、UserHasChangedHisUsername 等)的有趣事件,并且报告 read-model 应该使用这个本地 read-model。重建报告 read-model 时,您还可以重建本地用户 read-model 并获得用户在过去特定时刻的状态(两个 read-models 正在同步重建)。这需要更多代码,但它为您提供了一个分离的系统。
  2. 如果您想要一个单体系统,那么报告 read-model 可以查询用户 read-model;在这种情况下,不可能在过去的某个时刻获得用户的状态,因为用户 read-model 反映(可能)最新状态。