写点什么

DDD-17-CQRS

作者:南山
  • 2024-08-27
    江苏
  • 本文字数:501 字

    阅读完需:约 2 分钟

1、定义

  • “命令查询职责分离”(Command Query Responsibility Segregation )

  • 增、删、改功能称为 Command(命令)

  • 查询称为 Query

2、价值

  • 性能优化:因为读写操作分离,可以独立地对每一部分进行性能优化。

  • 简化复杂业务逻辑:将复杂的业务逻辑只放在处理命令的一侧,而查询侧则可以保持简单和快速。

  • 灵活的扩展性:读写需求往往不均衡,CQRS 允许针对读和写分别扩展资源。

  • 改进安全性:可以通过分离读写操作来实现更细粒度的安全控制。

3、规则

  • 第一,命令要走领域模型。

    第二,查询不走领域模型,直接用 SQL 和 DTO。

4、策略

  • 代码结构分离

    Command 一套

    Query 一套

  • 数据库结构分离

    不同表或冗余字段

  • 数据库实例分离

  • 应用服务分离

    单独服务实现展示功能

5、辅助理解

  • 增、删、改:如果绕过领域模型,领域逻辑和数据就可能分散在程序各个地方,无法保证数据的完整和一致性,程序也将很难理解和维护。

  • 查:逻辑并不会改变数据,所以并不会造成数据的不完整和不一致。

  • 为了实现命令而进行的查询,不会饶过领域模型

  • CQRS 中的 Q(查询),指的其实是来自客户端的意图。也就是说,客户端的目的就是查询,才算是 CQRS 里的 Q,如果客户端的目的是增、删、改,在这个过程中发生的查询,一般不算是 CQRS 里的 Q

用户头像

南山

关注

采菊东篱下,悠然见南山~ 2018-05-04 加入

黄沙百战穿金甲,不破楼兰终不悔!

评论

发布
暂无评论
DDD-17-CQRS_领域驱动设计_南山_InfoQ写作社区