CQRS实施细节

时间:2017-07-10 10:37:44

标签: domain-driven-design cqrs event-sourcing

我正在使用CQRS和Event-Sourcing实施微服务。 我已经看到了CQRS的不同实现,这些实现非常复杂。

我理解和实现的是我为Read(查询)和Write(命令)创建了两个模型,read模型具有物化视图,而写模型使用数据库,现在每当更新发生时,写模型更新数据库并生成事件,并将详细信息记录到读取模型已订阅的事件存储中,并且读取模型通过读取事件来更新其物化视图。

我的问题是这个模型是否依赖于CQRS和事件采购的基础?

2 个答案:

答案 0 :(得分:6)

  

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

这听起来不太合适。写模型不会更新数据库事件存储,它会更新 事件存储的数据库。

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

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

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

答案 1 :(得分:4)

听起来您已实施CQRS但未实施事件采购。 CQRS意味着将写入侧(命令)与读取侧(查询)隔离开来,这听起来就像你正在做的那样。

然而,听起来你的事件只是一种从写入方面到阅读方面的沟通方式,而即使是采购事件也是事实的来源。使用事件源实现的写入端只会持久保存事件(以及可选的快照),但在对数据库进行一些其他更新后不会这样做。写入侧的数据模型将仅由事件日志(以及可选的快照)组成。