2KB项目,专业的源码交易网站 帮助 收藏 每日签到

CQRS-容易的架构设计

  • 时间:2019-05-09 11:32 编辑:2KB 来源:2KB.COM 阅读:457
  • 扫一扫,手机访问
  • 分享
摘要: 英文原文:CQR
英文原文:CQRS-Simple architecture

有人说:“CQRS很难!”

是吗? 好吧,我也曾如许以为! 但,当我Start运用 CQRS 编写我的第一个软件时,它很快就不攻自破。更加主要的是,我以为从久远来看,以这类方法保护软件愈加轻易。

我Start考虑:为什么人们在一Start时以为它是何等艰苦难和庞杂? 我有一个实际:它包括规矩! 进入具有规矩的天下老是不舒适的,我们需求适应这些规矩。在这篇文章中,我想证实在这类状况下,这些规矩长短常易于了解的。

在通往 CQRS 的路上…

从基本上来讲,我们可以将 CQRS 视为对软件架构号令查询别离规矩的完成。在运用此办法的任务中,我留意到在最容易的 CQS 完成与真正成熟的 CQRS 之间有几个步调。我想那些步调可以顺遂地引入我之前曾经提到的规矩。

固然第一步没有完成我对 CQRS 的定义(可是有时分这么称谓的),可是他们还可认为你的软件引入一些真实的价值。每一个步调都引入一些风趣的设法,可以有助于构建或清算你的代码库/架构。

凡是,我们的路程从这里Start:

我们可能都晓得,这是一个典范的 N-层架构。假如我们想在这添加一些 CQS,我们可以“容易地”将营业逻辑层别离为号令和查询:

假如你还在运用老式代码库,这多是最难的一步,就像从意大利面式代码中浏览别离出反作用一样不容易。同时这个步调可能也是最有益处的一个;它会给你一个反作用履行的地位的概述。

等一下!你正在会商 CQS,CQRS ,可是你还没有定义究竟甚么是号令或查询!

没错。我们Start定义它们吧!在这里,我会给你我个人、直观的对号令和查询的定义。它其实不全面,并且在完成之前必需加以深化。

号令——起首,触发号令是独一改动系统形态的办法。号令担任惹起一切的对系统的改动。假如没有号令,系统形态坚持稳定!号令不该该前往任何值。我运用两个类来完成它:Command 和 CommandHandler 。Command 只是一个通俗的工具,CommandHandler 将它用于表现某些操作的输出值(参数)。我以为号令是容易地挪用范畴模子中的特定操作(纷歧定是每一个号令都有的操作)。

查询——异样的,查询是一个读操作。它读取系统的形态,过滤,聚总,和转换数据,并将其转化为最有效的格局。它可以履行屡次,并且不会影响系统的形态。我之前是运用一个有一些 Execute(…) 函数的类来完成它,可是如今我以为别离成 Query 和 QueryHandler/QueryExecutor 可能会更有效。

回到表示图,我需求廓清一些工作;我曾经隐蔽地做了一个弥补修正,模子改成范畴模子。因为我以为模子是一组数据容器,而范畴模子包含了营业规矩中实质庞杂性。由于我们对这里的系统架构感兴味,这个修正不会间接影响我们的进一步思索。可是值得一提的是,虽然号令担任改动系统的形态,实质庞杂性应当放到范畴模子。

好的,如今我们可以添加新的号令或许编写新的查询。短工夫内,很分明,实用于写的范畴模子其实不必定合适读。从某种特别模子中更轻易读取数据,这并非一个严重的发明:

我们可以引入别离模子,由 ORM 映照并构建查询,可是在某些状况下,特殊是当 ORM 引入开支时,它将对简化构造有所协助。

我以为这个特别的改动该当被好好地思索!

如今的问题是我们依然有仅在逻辑层级上别离的读和写模子,由于他们同享公共数据库。这就意味着我们曾经别离了读模子,但最有多是被一些 DB 视图给虚拟化了,物化视图的状况下更好。假如我们的系统没有功能问题,而且我们记着在写模子改动的时分更新查询,那这个计划是可行的。

下一步是引入完整别离的数据模子:

在我看来,这是第一个契合 Greg Young 提出的原始设法的模子,如今我们称它为 CQRS 。可是它依然有问题!我以后再写。

CQRS != 事情溯源

事情溯源是与 CQRS 一同提出的一个观点,凡是被标识为 CQRS 的一部分。ES(Event Sourcing)的观点很容易:我们的范畴生成的事情表现系统中的每个更改。假如我们从系统Start记载每个事情,并且从最后形态Start重现,我们会失掉系统确当前形态。它与银行账户的事务类似;我们可以从空账户Start,重现每个独自的事务,然后(有盼望地)失掉以后的余款。因而,假如我们曾经存储了一切的事情,我们能失掉系统确当前形态。

固然 ES 是存储系统的形态的一种很好的办法,可是 CQRS 其实不必定需求它。关于 CQRS ,范畴模子实践上怎么存储其实不主要,并且这只是一个选项。

读模子和写模子

当我们浏览 CQRS 时,别离模子的观点仿佛十分明晰和间接,但在完成过程当中仿佛其实不明白。写模子的义务是甚么?我能否应当将一切数据放入我的读取模子中?嗯,这得看状况!

写模子

我爱好把我的写作模子看做是系统的中心。这是我的范畴模子,它做营业决议计划,它很主要。它做出营业决议计划的现实在这里是相当主要的,由于它定义了这个模子的首要职责:它代表系统的真实形态,可以用来做出有价值的决议计划的形态。这类形式是独一的真谛起源。

假如你想了解更多关于设计范畴模子的常识,我引荐你浏览范畴驱动设计技术哲学。

读模子

在我第一次测验考试 CQRS 时,我运用了 WRITE 模子来构建查询……它是 OK 的(或许最少是有效的)。过了一段工夫,我们抵达了项目中需求破费大量工夫实行查询的地方。为何?由于我们是顺序员,优化是我们的第二天分。我们将模子设计为标准化,因而我们的读取端遭到衔接的影响。我们自愿预先盘算一些陈述的数据以坚持疾速。这很风趣,由于实践上我们引入了缓存。在我看来,这是读取模子的最好定义:它是一个正当的缓存。因为我们必需宣布项目,而非功用性的需求没有失掉知足,因而,缓存是经过设计来完成的。

标签读取模子可以建议它存储在一个数据库中,仅此罢了。实践上读取模子可能十分庞杂,你可使用图形数据库来存储社会衔接,运用 RDBMS 来存储财政数据。这是一个多言语耐久性很天然的地方。

本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协议,假如我们的任务有进犯到您的权益,请实时联络我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部