DDD-17-CQRS
1、定义
“命令查询职责分离”(Command Query Responsibility Segregation )
增、删、改功能称为 Command(命令)
查询称为 Query
2、价值
性能优化:因为读写操作分离,可以独立地对每一部分进行性能优化。
简化复杂业务逻辑:将复杂的业务逻辑只放在处理命令的一侧,而查询侧则可以保持简单和快速。
灵活的扩展性:读写需求往往不均衡,CQRS 允许针对读和写分别扩展资源。
改进安全性:可以通过分离读写操作来实现更细粒度的安全控制。
3、规则
第一,命令要走领域模型。
第二,查询不走领域模型,直接用 SQL 和 DTO。
4、策略
代码结构分离
Command 一套
Query 一套
数据库结构分离
不同表或冗余字段
数据库实例分离
应用服务分离
单独服务实现展示功能
5、辅助理解
增、删、改:如果绕过领域模型,领域逻辑和数据就可能分散在程序各个地方,无法保证数据的完整和一致性,程序也将很难理解和维护。
查:逻辑并不会改变数据,所以并不会造成数据的不完整和不一致。
为了实现命令而进行的查询,不会饶过领域模型
CQRS 中的 Q(查询),指的其实是来自客户端的意图。也就是说,客户端的目的就是查询,才算是 CQRS 里的 Q,如果客户端的目的是增、删、改,在这个过程中发生的查询,一般不算是 CQRS 里的 Q
评论