我最近阅读了很多关于CQRS的内容,对我而言,它似乎与事件采购密切相关。
但是像这样的回答说https://stackoverflow.com/a/9217461/277067 对我来说,对于像我这样的初学者来说,事件搜索似乎有点过于复杂/可怕(“什么?我的对象当前状态是否存储在任何地方?”)。
所以我想知道他们是否真的被束缚,或者是否有任何工具/ famework可以帮助做cqrs(事件观察者,命令处理程序)而没有事件源的复杂部分。
由于
答案 0 :(得分:2)
简答:不,CQRS和事件采购彼此没有联系。
答案很长:不,CQRS和事件源不是相互联系的,它们与域驱动设计(DDD)没有联系。
如果你想用几个词来定义什么是CQRS,事件源和DDD,你可能会得到如下的解释(当然,它们是过度简化的,但这正是这里的重点) :
他们每个人都很好地工作。例如,您可以使用DDD对域进行建模,然后在没有CQRS或事件源的情况下实施。您也可以在不需要DDD或CQRS的情况下进行事件采购。等等...
但是:这三个概念很好地结合在一起,这就是为什么它们经常在一个句子中被召集起来的原因。所以,不,他们没有彼此联系,但他们彼此结合起来很有意义。
下图显示了它们如何相互作用:
(图片来自documentation of wolkenkit,一个用于JavaScript和Node.js的CQRS和事件源框架。)
答案 1 :(得分:1)
您可以在没有事件采购的情况下使用CQRS。在命令处理程序中,您使用一些存储库来获取或保存聚合根的最后状态。只需实现简单的Repository,它将直接从数据库中保存和加载状态。
答案 2 :(得分:0)
不,他们没有被捆绑IMO,你可以找到我的相关问题的理由here
答案 3 :(得分:0)
在简短的回答中,我应该说:我们可以在没有事件采购的情况下拥有CQRS。但是如果没有CQRS,我们就无法进行事件采购。一般来说,我们有3种类型的CQRS:标准,事件来源和最终的一致性。
答案 4 :(得分:0)
CQRS 和 EventSourcing 是相互独立的。但根据需求,我们可以将它们结合起来,取得很好的效果。
让我们举一些例子:
CQRS(没有事件溯源):
电子商务负载均衡器:大多数对电子商务网站的请求都是获取请求,用户将在其中浏览可用产品。并且有卖家会更新这些产品和相关信息,但会不那么频繁地进行批量更新。此卖家请求可以从一台服务器提供服务,而用户请求可以从其他服务器提供服务。这两个服务器都从同一个数据库(单源点)获取/更新数据。 这里没有事件溯源。但是我们可以在负载均衡器级别拆分读写。
数据库主/从:如果数据库吞吐量很高,有时我们可以使用从来处理读取请求。在这里,我们再次能够在没有事件溯源的情况下拆分读写逻辑。
EventSourcing(没有 CQRS):