Domain driven design CQRS实施细节

Domain driven design CQRS实施细节,domain-driven-design,cqrs,event-sourcing,Domain Driven Design,Cqrs,Event Sourcing,我正在使用CQR和事件源实现微服务。 我见过CQR的不同实现,它们相当复杂 我所理解和实现的是,我为ReadQuery和WriteCommand创建了两个模型,read模型具有物化视图,write模型使用数据库,现在每当发生更新时,write模型都会更新数据库并生成事件,并将详细信息记录到事件存储中,而read模型已经订阅了该存储,读取模型通过读取事件更新其物化视图 我的问题是,这种模式是否依赖于CQR和事件来源的基础 写入模型更新数据库并生成事件,并将详细信息记录到事件存储 听起来不太对。写入

我正在使用CQR和事件源实现微服务。 我见过CQR的不同实现,它们相当复杂

我所理解和实现的是,我为ReadQuery和WriteCommand创建了两个模型,read模型具有物化视图,write模型使用数据库,现在每当发生更新时,write模型都会更新数据库并生成事件,并将详细信息记录到事件存储中,而read模型已经订阅了该存储,读取模型通过读取事件更新其物化视图

我的问题是,这种模式是否依赖于CQR和事件来源的基础

写入模型更新数据库并生成事件,并将详细信息记录到事件存储

听起来不太对。写入模型不更新数据库和事件存储,而是更新作为事件存储的数据库

CQRS的核心思想是处理命令和处理查询可以使用不同的数据模型。如果可以接受一点延迟,那么我们将更改写入一个数据模型,然后在后台更新第二个数据模型以匹配第一个数据模型中的数据。除此之外,这允许我们选择适合用途的数据存储—如果我们需要支持一系列图形查询,那么我们可以使用图形数据库作为读取模型的一部分

当我们将事件源添加到组合中时,上述模式不会改变。改变的是,我们复制到写入存储中的状态表示从当前状态的快照更改为历史的快照。因此,写入模型的适合用途的数据存储是一个事件存储

事件存储将快照数据库替换为真相的来源

写入模型更新数据库并生成事件,并将详细信息记录到事件存储

听起来不太对。写入模型不更新数据库和事件存储,而是更新作为事件存储的数据库

CQRS的核心思想是处理命令和处理查询可以使用不同的数据模型。如果可以接受一点延迟,那么我们将更改写入一个数据模型,然后在后台更新第二个数据模型以匹配第一个数据模型中的数据。除此之外,这允许我们选择适合用途的数据存储—如果我们需要支持一系列图形查询,那么我们可以使用图形数据库作为读取模型的一部分

当我们将事件源添加到组合中时,上述模式不会改变。改变的是,我们复制到写入存储中的状态表示从当前状态的快照更改为历史的快照。因此,写入模型的适合用途的数据存储是一个事件存储


事件存储将快照数据库替换为真相的来源。

听起来您已经实现了CQR,但没有实现事件源。 CQRS意味着将写端命令与读端查询分离,这听起来像是在做


然而,听起来你的事件仅仅是从写端到读端的一种交流方式,而在甚至是源代码中,事件都是真相的来源。使用事件源实现的写端只会持久化事件和可选的快照,但在对数据库进行一些其他更新后不会这样做。写入端的数据模型将仅由事件日志和可选快照组成。

听起来您已经实现了CQR,但没有实现事件源。 CQRS意味着将写端命令与读端查询分离,这听起来像是在做

然而,听起来你的事件仅仅是从写端到读端的一种交流方式,而在甚至是源代码中,事件都是真相的来源。使用事件源实现的写端只会持久化事件和可选的快照,但在对数据库进行一些其他更新后不会这样做。写端的数据模型将仅由事件日志和可选快照组成