gpt4 book ai didi

architecture - 更新 CQRS 中的查询部分

转载 作者:行者123 更新时间:2023-12-05 03:10:50 27 4
gpt4 key购买 nike

关于CQRS的文章我看了很多,有一点还是没看懂。到处都写着有两种模型(它们甚至可能有两种不同类型的数据存储)。其中一种模型称为write 模型,另一种称为read

流程如下:例如,编写模型进行一些更改,将这些更改存储到(自己的)数据库中,然后触发一个事件。然后 读取 模型,它必须订阅此类事件,处理它并更新自己的投影这是正确的吗?如果是,那么这基本上意味着人们称之为 read 模型的东西不仅仅是从存储中读取。

我错过了什么?主要问题是什么部分负责更新预测/查询部分?

附言谢谢大家的回复!现在拼图组装好了:-)

最佳答案

我的理解方式...

写入/命令端是域模型,负责确保系统处于正确状态 - 如果使用 DDD,则通过聚合。您加载聚合并应用一些行为。这是您的业务规则和行为所在的点。这也是您将引发领域事件的地方。这是一个很好的方法(尤其是结合事件源,其中您的数据库就是您的事件)。但是,我不认为 CQRS 要求使用事件。例如,您可以只更新 sql 数据库中的某些状态。命令端用于保护域的不变量,

Then read model, which has to be subscribed on such event, handle it and update own projection is this correct?

如果您正在使用事件,是的。而且,请参阅下文...

If yes then it means basically that something what people call read model is not reading only from the storage.

这取决于您的存储以及您“创建”读取模型的方式。您可以订阅事件,然后更新某些数据库(可以是 SQL 数据库中的表、文档数据库中的文档)或内存中对象模型中的读取模型。然后,您可以通过从数据库或内存模型中加载它们来查询这些读取模型。

但是,您也可以在没有事件的情况下使用 CQRS。在这种情况下,读取模型的概念可能只是一个数据库查询。即 SQL 查询。从与您的写入端相同的存储中读取。

例如,一个 API 或网页请求进来,你对你的数据库执行查询,然后将结果返回给用户。此查询不通过域模型。您仍然将读取与写入分开,只是没有使用事件。

The main question is what the part is responsible for updating projections/query part?

如果您正在使用事件,它将是事件的订阅者。您将收听事件,然后更新您的阅读模型。这些的实际实现将取决于您的体系结构。例如,如果使用 EventStore客户内置了对 subscribers 概念的支持.例如,这些可以在简单的控制台应用程序中或在 API 中实现。

这个流程可能是这样的:

  • 应用启动
  • 订阅N个事件流
  • 当您收到事件、更新数据库或内存模型时

如果您不使用事件,那就不同了。您的架构可能足够简单,读取端只查询数据库(从命令端已经是最新的!)。

关于architecture - 更新 CQRS 中的查询部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38543431/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com