首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >何时使用CQRS设计模式?

何时使用CQRS设计模式?
EN

Stack Overflow用户
提问于 2012-01-11 14:14:52
回答 12查看 45.3K关注 0票数 72

我和我的团队一直在讨论使用CQRS (命令查询责任分离)设计模式,我们仍然在努力评估使用它的利弊。根据:http://martinfowler.com/bliki/CQRS.html

我们还没有看到足够多的CQRS在这个领域的使用,我们还没有确信我们理解它的利弊。

那么,你们是怎么想的,什么时候需要使用CQRS?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2012-01-11 17:01:26

CQRS不是包含整个应用程序的模式。

它是一个建立在领域驱动设计(DDD)之上的概念。DDD的一个重要的战略概念是所谓的有界上下文.

在一个典型的应用程序中,有多个有界的上下文,其中任何一个都可以以合理的方式实现。例如

  • 用户管理-> CRUD
  • -> CRUD发票
  • 保险单管理(核心领域) -> CQRS
  • ..。

这可能没有回答你的问题,但它可能会让你对这个话题有更深入的了解。老实说,我认为如果不考虑项目的具体情况,就无法回答这个问题,即使这样,也很少有明确的最佳实践。

票数 72
EN

Stack Overflow用户

发布于 2012-01-11 14:32:12

那么,CQRL的批评者可能会说CQRS是复杂的,这可能是真的。

当然,它增加了开发CQRS风格的简单CRUD应用程序的开销,所以我只考虑在以下情况下使用CQRS:

  1. 大型团队-如果您选择了CQRS体系结构,您可以轻松地在人员之间拆分开发任务。您的高层人员可以在领域逻辑上工作,将通常的工作留给技能较低的开发人员。
  2. 困难的业务逻辑- CQRS迫使您避免将域逻辑和基础设施操作混合在一起。
  3. 可伸缩性关系到--使用CQRS,您可以获得很好的读写性能,可以在多个节点上扩展命令处理,并且当查询是只读操作时,可以对其进行优化以执行快速读取操作。
票数 40
EN

Stack Overflow用户

发布于 2012-01-20 15:20:15

当您有一个复杂或困难的业务领域时,并且:

  • 使用事件源;您需要一种很好的测试逻辑的方法。
  • 使用事件源;您希望通过测试和推理来证明您的行为。
  • 您有多个域服务的客户端或使用者(而不仅仅是单个web服务器)。

或者您的用户需要对公共数据采取行动:

  • 您希望将域的数据合并概念正式化。
  • 或者要将逻辑应用于合并事件。

或者您有可伸缩性要求:

  • 您可以将该模式应用为消除瓶颈的反规范化模式。
  • 您想要水平而不是垂直地缩放。

或者您有性能问题(可伸缩性的另一面):

  • 例如,您需要将您的体系结构迁移到事件驱动的体系结构-- CQRS作为模式是一个很好的垫脚石。

或者你有一个团队在身体上是分开的:

  • 你的团队的一部分在另一个国家
  • 或者是很难进行面对面的交流,所以您想要将读取模型从事情的写端(sagas、域、CRUD)中分离出来。

并不是CQRS过于复杂,而是计算机。

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

https://stackoverflow.com/questions/8820748

复制
相关文章

相似问题

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