Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 何时使用CQRS设计模式?_Design Patterns_Architecture_Cqrs - Fatal编程技术网

Design patterns 何时使用CQRS设计模式?

Design patterns 何时使用CQRS设计模式?,design-patterns,architecture,cqrs,Design Patterns,Architecture,Cqrs,我的团队和我一直在讨论使用CQRS(命令查询责任分离)设计模式,我们仍在尝试评估使用它的利弊。根据: 我们还没有看到CQR在该领域有足够的应用 我们理解它的利弊 你们认为什么时候使用CQR会出现问题 CQRL的批评者可能会说CQRS很复杂,这可能是真的 当然,它增加了开销,在CQRS样式中开发了一个简单的CRUD应用程序,所以我只考虑在以下情况下使用CQRS: 大型团队-如果您选择了CQRS体系结构,您可以轻松地在人员之间划分开发任务。您的高层人员可以处理域逻辑,将常规内容留给技能较低的开发人员

我的团队和我一直在讨论使用CQRS(命令查询责任分离)设计模式,我们仍在尝试评估使用它的利弊。根据:

我们还没有看到CQR在该领域有足够的应用 我们理解它的利弊


你们认为什么时候使用CQR会出现问题

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

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

  • 大型团队-如果您选择了CQRS体系结构,您可以轻松地在人员之间划分开发任务。您的高层人员可以处理域逻辑,将常规内容留给技能较低的开发人员
  • 困难的业务逻辑-CQRS迫使您避免将域逻辑和基础架构操作混为一谈
  • 可伸缩性很重要-使用CQR,您可以实现出色的读写性能,可以在多个节点上扩展命令处理,并且由于查询是只读操作,因此可以对其进行优化以执行快速读取操作

  • CQRS不是一种涵盖整个应用程序的模式

    这是一个基于领域驱动设计(DDD)的概念。DDD的一个重要战略概念是所谓的有界上下文

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

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

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

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

    • 与活动采购;你想要一种测试逻辑的好方法
    • 与活动采购;你想通过测试和推理来证明你的行为
    • 您的域服务有多个客户端或使用者(而不仅仅是单个web服务器)
    或者您的用户需要处理公共数据:

    • 您希望将域的数据合并概念形式化
    • 或者您希望应用逻辑来合并事件
    或者您有可伸缩性要求:

    • 您可以将该模式作为消除瓶颈的非规范化模式应用
    • 您希望水平缩放,而不是垂直缩放
    或者您有性能问题(可伸缩性的另一方面):

    • e、 g.您需要将您的体系结构迁移到事件驱动的体系结构—CQRS作为模式是一个很好的垫脚石
    或者你有一个身体上不连贯的团队:

    • e、 g.您团队的部分成员在另一个国家
    • 或者很难进行面对面的交流,因此您希望将读模型与写模型(sagas、domain、CRUD)分离
    过于复杂的不是CQR,而是计算机

    何时使用CQRS设计模式

    当很难从存储库中查询用户需要查看的所有数据时,可以使用CQRS体系结构模式。当UX设计创建跨越多个聚合类型和实例的数据视图时,尤其如此。你的领域越复杂,这种情况就越容易发生

    当不适合在UX设计上妥协时,使用CQR试图缓解与其他解决方案相关的问题,例如:

    • 要求客户端使用多个存储库来检索所有聚合实例;或
    • 在各种存储库上设计专门的查找器,以便使用单个查询收集不连贯的数据

    总而言之:当用户需要查看难以从存储库中查询数据时,使用CQR,这往往发生在您的域越复杂的情况下。

    以下是使用CQR的原因:

  • 可伸缩性(读超过写,因此每个的伸缩性要求不同,可以更好地解决)
  • 灵活性(独立的读/写模型)
  • 降低复杂性(将复杂性转移到单独的关注点)
  • 专注于领域/业务
  • 有助于设计直观的基于任务的UI

  • 在现实场景中,当前端/web服务客户端需要来自多个域的大量数据并且从数据库检索这些数据需要很长时间时,CQR可能很有用


    在这种情况下,您可能会考虑创建单独的读取模型,该模型将更快地开发,并且可能具有更快的执行时间。

    < P>关于实现CQRS,当您有前端/ Web服务客户端需要来自多个域的大量数据时,我喜欢分离读取模型的想法,并且我想尝试一下。我想尝试它的主要原因是由于开发和执行过程中的“缓慢”问题;尤其是在处理大数据集或“大数据”时。我正在研究降低复杂性、为混合体系结构增加可伸缩性、弹性和灵活性的所有可用选项。

    如果您发现问题域不适合更通用的体系结构,或者您正在试验域驱动设计,我建议您尝试CQR

    这是一个强大的模式,可以让您很好地了解问题领域,并解决一些技术和基础设施挑战。但值得记住的是,它将随价格而来,并且由于与其他架构在概念上的差异,它将需要一种思维模式