CQRS: Command Query Responsibility Segregation

2026-05-203 引用

把`写模型`和`读模型`分开

CQRS = 把写模型读模型分开

CQRS 的本质不是读写分库,而是承认读和写的建模目标不同,所以分别建模;读侧是写侧事实的派生视图。

写优化表示负责:接收命令、校验业务规则、维护领域状态

读优化表示负责:面向查询、报表、页面展示、搜索条件,提前组织好数据

读模型不是主数据源,而是从写模型/事件/变更日志派生出来的投影

写模型 / 事实源
   ↓     事件 / CDC / 日志
读模型 / 投影 / 索引 / 宽表 / 缓存
   ↓
查询 API / 页面 / 报表

写模型关注:

  • 业务行为是否合法
  • 状态转换是否正确
  • 不变量是否被保护
  • 事务边界在哪里

读模型关注:

  • 查得快不快
  • 页面是否好展示
  • 是否少 join
  • 是否可以预聚合
  • 是否可以缓存
  1. https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs

评论