Dino Esposito CQRS 消息以及事件看法
Dino Esposito on CQRS, Messages and Events
Esposito注意到CRUD系统的一个特征在于数据总是以快照的形式保存起来的,亦即最近的已知系统状态,而这一点往往被人忽略。如果客户提出了某个特性,需要获得应用在过去某个阶段的状态,那么仅仅保存快照数据是无法满足这一需求的。在他看来,这种情况下唯一的解决方案就是重新修改系统的架构,让它保存领域事件,并保存整个领域中所有的变更记录。将数据保存为事件能够降低数据的抽象级别,设计者就有机会将相同的数据用于不同的目的,包括单纯的查询、商业智能以及系统使用情况分析。
Esposito从零六至今一直保持着微软MVP的荣誉,他将CQRS描述为能够区分修改状态的代码与读取状态的代码的一种设计风格。他强调说:一旦认识到命令与查询是两种截然不同的操作,对于软件架构设计的想法就可能带来重大的影响,系统的每个部分都会变得更容易理解与编码。其中命令部分将关注于业务规则,而查询部分则只需要考虑如何返回数据。两者各自的处理管道也能够进行分别优化,而不会产生破坏对方的功能的风险。CQRS的最基本形式是在一个数据库中实现读写分离,但也存在着一些更高级的表现形式,Vladimir Khorikov曾专门撰文讨论过这一话题。
Esposito认为,基于消息的架构的主要优势在于:在支持一些新的用户场景时,它能够简化对复杂性的管理以及业务工作流的变更。他也提到,如果不使用CQRS而打造一个基于消息的系统是非常困难、甚至是不可能的。通过使用领域事件,可以将工作流建模为一个个独立的操作(由命令触发)以及事件。通过创建处理器对命令以及后续的事件进行处理,整个工作流就被分解为多个小步骤,从而简化工作流的变更。
Esposito也表示,许多开发者倾向于仅在具有高度协作性以及大规模的应用中使用CQRS。但在他看来,无论系统表现出怎样的复杂度,这种软件开发方式都能够体现出其价值所在。虽然在具有高度复杂性的业务中,CQRS能够更好地表现出其优势,但他认为即使在一些普通的应用,例如基于CRUD的应用中,CQRS同样也是一种简单而强大的模式。
Dino Esposito在MSDN杂志上所发表的三篇系列文章中表示:命令查询职责分离(CQRS)架构是系统架构变革的一个起点,它将对整个架构带来深远的影响。CQRS是软件架构师的设计理念从“需要持久化的模型”逐渐演变为“需要进行日志记录的事件”的第一步。在他看来,软件架构在今后数年将成为人们的主要关注点,而主要的数据源将来自于基于事件的数据,而不是数据的快照。
玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/news/a11205.html
相关文章 Recommend
必知PYTHON教程 Must Know PYTHON Tutorials
- • python 解释器
- • python idle
- • python dir函数
- • python 数据类型
- • python type函数
- • python 字符串
- • python 整型数字
- • python 列表
- • python 元组
- • python 字典
- • python 集合
- • python 变量
- • python print
- • python 函数
- • python 类定义
- • python import
- • python help
- • python open
- • python 异常处理
- • python 注释
- • python continue
- • python pass
- • python return
- • python global
- • python assert
- • python if语句
- • python break
- • python for循环
- • python while循环
- • python else/elif
- • lambda匿名函数
必知PYTHON模块 Must Know PYTHON Modules
- • os 模块
- • sys 模块
- • re 正则表达式
- • time 日期时间
- • pickle 持久化
- • random 随机
- • csv 模块
- • logging 日志
- • socket网络通信
- • json模块
- • urlparse 解析URL
- • urllib 模块
- • urllib2 模块
- • robotparser 解析
- • Cookie 模块
- • smtplib 邮件
- • Base64 编码
- • xmlrpclib客户端
- • string 文本
- • Queue 线程安全
- • math数学计算
- • linecache缓存
- • threading多线程
- • sqlite3数据库
- • gzip压缩解压
最新内容 NEWS
- • 2019年3月最新消息: Python 3.4.10 现已推出
- • 支付宝官方给力福利!每天可领1个红包,
- • Dino Esposito CQRS 消息以及事件看法
- • 树莓派 raspi驱动LoRaWAN基站
- • Kuzzle内部部署文档后端
- • Java 9跳票 发布时间将迟至2017年3月
- • iOS Apple 停止Ad 广告业务
- • Microsoft UWP上支持React Native
- • Angular移动工具集Web应用原生感觉
- • Windows 10周年更新Edge浏览器支持扩展
图文精华 RECOMMEND
-
支付宝官方给力福利!每天可领
-
选择Python而不选择Go语言的原因
-
Python相关的软件团队未来离不开
-
Ubuntu磁盘缓存模块提供 缩略图服
-
Python程序员,2016一起告别码农!
-
为什么企业很难招聘到好的pytho
热点文章 HOT
- 支付宝官方给力福利!每天可领1个红包,
- 使用Python语言编写的Fuzzing第三方框架
- 超级QQ这个服务有可能会整合到QQ普通会员
- 正在创业者的你是否在经历O2O的那些坑
- 索尼PlayStation TV机顶盒650RMB左右
- 你N年前可想到今天的迅雷股价如此之高
- 阿里集团的公共DNS正式发布:223.5.5.5 223.
- Apache Qpid Python 最新1.35.0 版本发布