.NET MediatR 之 CQRS

CQRS的全称是:“Command and Query Responsibility Segregation”,直译过来就是命令与查询责任分离,可以通俗的理解为读写分离。

微软的官方文档中对此做过如下陈述:
CQRS 命令和查询责任分离数据存储的读取和更新操作分离的模式。在应用程序中实现 CQRS 可以最大程度地提高其性能、可伸缩性和安全性。 通过迁移到 CQRS 而创建的灵活性使系统能够随着时间的推移更好地发展,并防止更新命令在域级别导致合并冲突。

微软也给出了相应的隔离模型解决方案:
CQRS 使用命令来更新数据,使用查询来读取数据,将读取和写入 分离到不同的 模型中。
1、命令应基于任务,而不是以数据为中心。
2、命令可以放置在队列中进行异步处理,而不是同步处理。
3、查询从不修改数据库。查询返回的 DTO 不封装任何域知识。

CQRS 的好处包括:
1、「独立缩放」: CQRS 允许读取和写入工作负载独立缩放,这可能会减少锁争用。
2、「优化的数据架构」: 读取端可使用针对查询优化的架构,写入端可使用针对更新优化的架构。
3、「安全性」: 更轻松地确保仅正确的域实体对数据执行写入操作。
4、「关注点分离」: 分离读取和写入端可使模型更易维护且更灵活。 大多数复杂的业务逻辑被分到写模型。 读模型会变得相对简单。
5、「查询更简单」: 通过将具体化视图存储在读取数据库中,应用程序可在查询时避免复杂联接。

有了 MediatR 我们可以在应用中轻松实现 CQRS:
IRequest<> 的消息名称以 Command 为结尾的是命令,其对应的 Handler 执行「写」任务
IRequest<> 的消息名称以 Query 为结尾的是查询,其对应的 Handler 执行「读」数据

结束语:
MediatR 是一个简单的中介者实现,可以极大降低我们的应用复杂度,也能够使得我们一路从 CRUD 到 CQRS 到 DDD 进行逐级演进。毕竟我们是生活在现实中的人,不能罔顾商业现实,纯粹一味追求技术。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值