Appearance
Day 14 - 命令与查询职责分离(CQRS)
📖 今日目标
- 理解CQRS(Command Query Responsibility Segregation)模式
- 掌握CQRS的实现方式
- 学习CQRS的适用场景
核心概念
什么是CQRS?
CQRS 是一种将命令(写操作)和查询(读操作)分离的架构模式。传统架构中,读写使用同一个数据模型,而CQRS将它们分开处理。
关键要点
1. 为什么需要CQRS?
- 读写需求不同
- 读可以优化,不需要事务
- 写需要事务保证一致性
- 不同场景需要不同的模型
2. CQRS架构
命令端 → 领域模型 → 写入存储
↓
同步/异步
↓
读取存储 ← 读取模型
查询端 → 返回读取模型3. CQRS示例
java
// 命令端
public class OrderCommandHandler {
public void handle(CreateOrderCommand command) {
Order order = orderFactory.create(command);
orderRepository.save(order);
// 同步到读模型
eventPublisher.publish(new OrderCreatedEvent(order));
}
}
// 查询端
public class OrderQueryService {
public OrderDTO findById(String orderId) {
return orderReadRepository.findDTO(orderId);
}
}面试考点
问题:CQRS的优缺点是什么?
答案:
优点:
- 读写分离优化
- 读取模型可以非规范化
- 更高的可扩展性
- 灵活性高
缺点:
- 增加系统复杂度
- 数据同步一致性挑战
- 需要处理最终一致性
适用场景:复杂业务、高并发读、多团队协作
实践思考
🎯 思考题:
在什么情况下CQRS会得不偿失?什么情况下适合使用?
📅 学习进度
| Day | 主题 | 状态 |
|---|---|---|
| 01-13 | 战略设计 + 战术基础 | ✅ |
| 14 | 命令与查询职责分离(CQRS) | ✅ |
| 15 | 限界上下文集成模式 | ⬜ |
| ... | ... | ... |
| 30 | 复习与总结 | ⬜ |
