什么是 CQRS?
CQRS(Command Query Responsibility Segregation,命令查询职责分离)将用于更新数据的模型与用于读取数据的模型分开。 写入侧关注业务规则;读取侧按展示或查询的需要组织信息。
例如,预订电影票需要检查座位是否可用。列出票务信息则需要电影名称、放映时间和座位位置。这些任务涉及相同的数据,但需要不同的处理方式。
两侧分别做什么?
- 写入侧: 接收命令,也就是要求执行某项操作的请求,例如订票或退票。写入模型检查规则并保存有效的变更。
- 读取侧: 接收查询,也就是获取信息的请求,例如获取电影票列表。读取模型返回所需数据,而不再次执行订票操作。
两个模型可以位于同一个应用中,并共享数据库。CQRS 不要求使用两个数据库、队列或事件溯源。
CQRS 在订票中如何工作
顾客选择座位后,请求发送到写入侧。系统检查并保存预订;必须使用带有适当数据约束的事务,防止两名顾客预订同一场次的同一个座位。写入成功后,顾客收到确认。
