根据读取的模型构建其他读取模型

时间:2017-02-09 12:38:17

标签: domain-driven-design cqrs

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

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

也许我可以为报告查询构建支持用户表?

1 个答案:

答案 0 :(得分:1)

答案取决于你想要太多阅读模型的解耦方式。

  1. 如果您想要微服务类型的解耦(松散的),则报告读取模型应仅取决于用户AR生成的事件;在这种情况下,您必须创建另一个读取模型,该模型仅捕获用户AR中的有趣事件(UserWasCreated,UserHasChangedHisUsername等),并且Reports读取模型应使用此本地读取模型。在重建Reports读取模型时,您还可以重建本地用户读取模型,并在过去的特定时刻获取用户的状态(两个读取模型正在同步重建)。这需要更多代码,但它会为您提供一个解耦系统。
  2. 如果你想要一个单一系统,那么Reports阅读模型可以查询用户阅读模型;在这种情况下,由于用户阅读模型反映(可能)最新状态,因此无法在过去的某个时刻获得用户的状态。