Skip to content

Day 14 - 命令与查询职责分离(CQRS)

📖 今日目标

  1. 理解CQRS(Command Query Responsibility Segregation)模式
  2. 掌握CQRS的实现方式
  3. 学习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的优缺点是什么?

答案:

优点

  1. 读写分离优化
  2. 读取模型可以非规范化
  3. 更高的可扩展性
  4. 灵活性高

缺点

  1. 增加系统复杂度
  2. 数据同步一致性挑战
  3. 需要处理最终一致性

适用场景:复杂业务、高并发读、多团队协作

实践思考

🎯 思考题

在什么情况下CQRS会得不偿失?什么情况下适合使用?


📅 学习进度

Day主题状态
01-13战略设计 + 战术基础
14命令与查询职责分离(CQRS)
15限界上下文集成模式
.........
30复习与总结

本文为DDD 30天学习计划第14天内容

📚 导航

| ← Day 13 - 上一章 | Day 15 - 下一章 →

最后更新: