.NET现代化应用开发 - CQRS&类目管理代码剖析

九月MASA Framework 进行了第四次课程直播,课程主题为类目管理的开发,直播中进行了理论讲解和实战演练(CQRS实践的演示可直达推文底部观看直播回放)

开始环节我们围绕三个点介绍CQRS的原理

首先,我们先对之前的事件流概念进行简单的回顾

事件风暴回顾 - 事件流

接下来到我们本节课的主题内容

CQRS

命令查询职责分离

大白话:读和写分开

信息来源:https://docs.microsoft.com/zh-cn/azure/architecture/patterns/cqrs

优势

1.独立缩放

2.根据读写分别优化数据结构

3.更轻松地确保仅正确的域实体对数据执行写入

4.关注点分离,读关注读取性能,写关注复杂业务逻辑

5.物化视图的读模型可有效减少复杂的表链接

什么时候用

1.源于访问频次、数据量或者是数据模型数量等因素导致查询和更新的需求差距逐渐变大

2.最大限度地提高性能

3.控制细粒度的缩放

4.控制不同应用的安全级别

5.降低多开发者协作冲突,事件的粒度可以足够细

注意

1.命令应基于任务,而不是数据

2.命令可入队,使用异步而非同步

3.查询不包含修改动作和领域知识

4.事件溯源支持重播,比如用于通知读模型

事件溯源

只追加存储来记录对数据采取的完整系列操作

而不是仅存储域中数据的当前状态

优势

1.事件不可变2.事件有助于领域专家了解过程3.事件只增不改,不需要考虑并发冲突4.事件存储有助于监控数据变化5.事件重播可轻易的对系统状态进行还原,调试,测试6.事件可被不同的应用多次,异步消费

注意

1.事件驱动是异步的,读模型会有一定程度的延迟2.修改事件的唯一方式只能通过补偿事件3.事件顺序至关重要,事件存储有责任保证事件顺序完整性

不管是上面讲到的CQRS,还是事件溯源,这些都是为事件驱动做准备

事件驱动

事件驱动的小知识点

事件驱动里有一些值得注意的点

事件不等于 命令

1事件不会告诉订阅者如何做2.事件只通知某个事件发生了3.事件是不可变的

4.事件被执行时,可能会产生新的事件并形成事件流

事件标准化

支持过滤/转换/查询等

事件其实是需要标准化的,那有没有标准呢?

那就是CloudEvents

CloudEvents

包含了事件发生的上下文和相关数据,事件代表了已发生的事实,不包含任何目的地相关信息。消息能够传达事件内容,从而将事件数据从源头传输到指定的目的地

1.发送的消息符合规范,那么它就是一个有效的 CloudEvent

2.支持的云厂商包括微软,谷歌,阿里,甲骨文等

那我们来看事件和订阅者的关系,事件和订阅者可以是一对多、一对一、多对一,但事实上事件和订阅者的关系是多对多

事件驱动的使用场景

微服务解耦,跨集群通信

兼顾遗留,系统对接

游走在云与非云中

部分 AOP类场景

流计算

Event Bus

简单来说,Event Bus主要的功能是接收消息、处理消息、转发消息,作为发布者和订阅者中转站的角色

发布订阅模式

发布者通过调度中心将消息发送给订阅者。调度中心解决发布与订阅者之间的关系,保证消息可以送达订阅者手中

最常见的是并行执行顺序执行

MASA 事件处理

MASA 是如何进行事件处理的?

MASA 事件处理主要分为两部分一个是MASA Dispatcher,另一个是MASA DDD

MASA Dispatcher>>

Event Bus>>进程内事件总线

Integration Event Bus>>集成事件总线(跨进程)

MASA DDD>>Domain Event Bus>>领域事件总线**(自动协调进程内事件和集成事件调度)**

通过前面的学习,我们已经了解了Event Bus 和MASA 事件处理流程,那MASA Event Bus 是怎么样的一个事件流程?

MASA Event Bus

发布者把事件发布到Even Bus

关系链表支持特性Handler中间件分布式事务UoW更多...

发送到订阅者

本次课程内容到这里就全部结束,CQRS实战演示部分可以点击下方链接,观看直播回放。

.NET现代化应用开发 - CQRS&类目管理代码剖析


如果你对我们MASA感兴趣,无论是代码贡献、使用、提 Issue,欢迎联系我们

  • WeChat:MasaStackTechOps

  • QQ:7424099

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/5447363/blog/5582764

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。