我正在使用CQRS和Event-Sourcing实现微服务。我见过CQRS的不同实现,它们相当复杂。
我所理解和实现的是,我已经为Read(Query)和Write(Command)创建了两个模型,read模型有一个物化视图,而write模型使用Database,现在每当发生更新时,write模型都会更新数据库并生成一个事件,并将详细信息记录到事件存储中,read模型已经订阅了该事件存储,而read模型通过从事件中读取来更新其物化视图。
我的问题是,这个模型是否依赖于CQRS和事件采购的基础?
发布于 2017-07-10 19:43:56
写入模型更新数据库并生成事件,并将详细信息记录到事件存储中
这听起来不太对劲。write模型不更新数据库和事件存储,它更新作为事件存储的数据库。
CQRS的核心思想是处理命令和处理查询可以使用不同的数据模型。如果有一点延迟是可以接受的,那么我们将更改写入一个数据模型,然后在后台更新第二个数据模型以匹配第一个数据模型中的数据。在其他方面,这允许我们选择适合的数据存储-如果我们需要支持一组图形查询,那么我们可以使用图形数据库作为读取模型的一部分。
当我们将事件源添加到混合中时,上面的模式不会改变。真正改变的是,我们复制到写存储中的状态表示形式从当前状态的快照更改为历史的快照。因此,适合写入模型的目标数据存储是事件存储。
事件存储将取代快照数据库作为真值源。
发布于 2017-07-11 04:00:26
听起来你已经实现了CQRS,但没有实现事件源。CQRS意味着将写入端(命令)与读取端(查询)分离,听起来就像你正在做的那样。
然而,听起来你的事件仅仅是一种从写入端到读出端的通信方式,而即使在采购方面,事件也是真相的来源。使用事件源实现的写入端将仅持久化事件(以及可选的快照),但不会在对数据库执行某些其他更新之后执行此操作。写入端的数据模型将仅由事件日志(以及可选的快照)组成。
https://stackoverflow.com/questions/45009876
复制相似问题