首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CQRS与CQS的区别

CQRS与CQS的区别
EN

Stack Overflow用户
提问于 2015-12-13 19:44:30
回答 5查看 32.6K关注 0票数 110

我正在学习什么是CQRS模式,并逐渐认识到还有CQS模式。

当我试图搜索时,我在CQRS上找到了很多图表和信息,但没有发现多少关于CQS的信息。

CQRS模式的关键点

在CQRS中有一个要写的模型(命令模型)和一个要读取的模型(查询模型),它们是完全独立的。

CQS与CQRS有何不同?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-12-15 03:41:34

命令查询分离( CQS )与命令查询责任分离( CQRS )有着密切的关系。您可以认为CQS处于类或组件级别,而CQRS则更多地位于有界上下文级别。

我倾向于认为CQS是在微观层面,CQRS是在宏观层面。

CQS规定了用于从模型查询或写入模型的不同方法:查询不变异状态,而命令更改状态,但没有返回值。它是由Bertrand设计的,这是他在埃菲尔编程语言方面的开创性工作的一部分。

CQRS规定了一种类似的方法,但它更像是一条贯穿您的系统的路径。查询请求采取与命令不同的路径。查询返回数据而不更改基础系统;命令更改系统,但不返回数据。

格雷格·杨( Greg )收集了一个关于几年前CQRS是什么的写得很透彻,并探讨了CQRS是如何演变的。这份文件几年前向我介绍了CQRS,我发现它仍然是一份非常有用的参考文件。

票数 130
EN

Stack Overflow用户

发布于 2019-04-17 02:48:15

这是一个老问题,但我要试着回答它。我不经常在StackOverflow上回答问题,所以如果我做了一些超出社区范围的事情,比如链接到事物,写一个长的答案等等,请原谅我。

CQRS和CQS有许多不同之处,但是CQRS在其定义中使用了CQS!让我们从定义两者开始,然后我们可以讨论差异。

CQS根据消息的返回值定义两种类型的消息:无返回值(void)指定这是命令;返回值(非空)指定此方法为查询。

  • 命令更改信息
  • 查询返回信息

命令改变状态。查询没有。

现在是CQRS,它对命令和查询使用与CQS相同的定义。CQRS说的是,我们不希望一个带有命令和查询方法的对象。相反,我们需要两个对象():一个包含所有命令,另一个包含所有查询。

总体来说,这个想法非常简单;这是做完这件事之后的每一件事都变得有趣起来。网上有无数的对话,我讨论了一些相关的属性(对不起,这里输入的太多了!)

票数 50
EN

Stack Overflow用户

发布于 2018-09-12 14:35:04

  • CQS是关于命令和查询的。它不关心模型。您以某种方式分离了用于读取数据的服务和用于写入数据的其他服务。
  • CQRS是用于写和读的独立模型。当然,使用写模型通常需要读取一些东西来实现业务逻辑,但是您只能对read模型进行读取。独立的数据库是最先进的。但是,假设单个DB具有在ORM中建模的单独的读写模型。通常都够好的。

我发现,人们经常说,当他们有CQS时,他们会练习CQRS。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34255490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档