软件架构与通信模式解析
1. CQRS 模式概述
CQRS(Command-Query Responsibility Segregation)模式将命令和查询的职责分离,适用于需要在多个模型中处理相同数据的应用程序。以下是关于 CQRS 模式的详细介绍:
1.1 投影方式
在 CQRS 中,投影方式分为同步投影和异步投影。建议始终实现同步投影,并可选择性地在其上添加异步投影,因为其他方法会增加添加新投影或重新生成现有投影的难度。
1.2 模型隔离
在 CQRS 架构里,系统模型的职责根据类型进行隔离:
- 命令操作 :命令只能对强一致性的命令执行模型进行操作。
- 查询操作 :查询不能直接修改系统的持久化状态,包括读取模型和命令执行模型。
常见的误解是认为命令只能修改数据,且只能通过读取模型获取数据用于显示,即命令执行方法不应返回任何数据。实际上,命令应该让调用者知道操作是否成功,若失败,需说明失败原因,如验证问题或技术问题。命令可以且在很多情况下应该返回数据,只要这些数据来自强一致性模型(命令执行模型),因为我们不能期望最终一致的投影能立即刷新。
1.3 使用场景
CQRS 模式在以下场景中非常有用:
- 多模型处理 :适用于需要在多个模型中处理相同数据的应用程序,这些数据可能存储在不同类型的数据库中。
- 支持领域驱动设计 :从操作角度看,该模式支持领域驱动设计的核心价值,即使