熟悉范畴事宜
范畴事宜(Domain Events)是范畴驱动设计(Domain Driven Design,DDD)中的一个概念,用于捕获我们所建模的范畴中所产生过的工作。范畴事宜本身也作为通用说话(Ubiquitous Language)的一部分成为包含范畴专家在内的所有项目成员的交换用语。比如,在用户注册过程中,我们可能会说“当用户注册成功之后,发送一封迎接邮件给客户。”,此时的“用户已经注册”就是一个范畴事宜。 当然,并不是所有产生过的工作都可以成为范畴事宜。一个范畴事宜必须对营业有价值,有助于形成完全的营业闭环,也即一个范畴事宜将导致进一步的营业操作。举个咖啡厅建模的例子,当客户来到前台时将产生“客户已达到”的事宜,如不雅你存眷的是客户接待,比如须要为客户预留地位等,那么此时的“客户已达到”就是一个典范的范畴事宜,因为它将用于触发下一步——“预留地位”操作;然则如不雅你建模的是咖啡结账体系,那么此时的“客户已达到”便没有多大年夜存在的须要——你弗成能在用户达到时就急速向客户要钱对吧,而”客户已下单“才是对结账体系有效的事宜。 在微办事(Microservices)架构实践中,人们大年夜量地借用了DDD中的概念和技巧,比如一个微办事应当对应DDD中的一个限界高低文(Bounded Context);在微办事设计中应当起首辨认出DDD中的聚合根(Aggregate Root);还有在微办事之间集成时采取DDD中的防腐层(Anti-Corruption Layer, ACL);我们甚至可以说DDD和微办事有着生成的默契。更多有关DDD的内容,请参考笔者的另一篇文┞仿或参考《范畴驱动设计》及《实现范畴驱动设计》。 在DDD中有一条原则:一个营业用例对应一个事务,一个事务对应一个聚合根,也即在一次事务中,只能对一个聚合根进行操作。然则在实际应用中,我们经常发明一个用例须要修改多个聚合根的情况,并且不合的聚合根还处于不合的限界高低文中。比如,当你在电商网站上买了器械之后,你的积分会响应增长。这里的购买行动可能被建模为一个订单(Order)对象,而积分可以建模成账户(Account)对象的某个属性,订单和账户均为聚合根,并且分别属于订单体系和账户体系。显然,我们须要在订单和积分之间保护数据一致性,然而在同一个事务中同时更新两者又违背了DDD设计原则,并且此时须要在两个不合的体系之间采取重量级的分布式事务(Distributed Transactioin,也叫XA事务或者全局事务)。别的,这种方法还在订单体系和账户体系之间产生了强耦合。经由过程惹人范畴事宜,我们可以很好地解决上述问题。 总的来说,范畴事宜给我们带来以下好处:- 解耦微办事(限界高低文)
- 赞助我们深刻懂得范畴模型
- 供给审计和申报的数据来源
- 迈向(Event Sourcing)和CQRS等

稍微回想一下计算机硬件的工作道理我们便不难发明,全部计算机的工作过程其实就是一个对事宜的处理过程。当你点击鼠标、敲击键盘或者插上U盘时,计算机便以中断的情势处理各类外部事宜。在软件开辟范畴,事宜驱动架构(Event Driven Architecture,EDA)早已被开辟者用于各类实践,典范的应用处景比如浏览器对用户输入的处理、消息机制以及SOA。比来几年从新进入开辟者视野的响应式编程(Reactive Programming)更是将事宜作为该编程模型中的一等公平易近。可见,“事宜”这个概念一向在计算机科学范畴中扮演侧重要的角色。
推荐阅读
【引自攀岩人生的博客】MMM即Multi-Master Replication Manager for MySQL:mysql多主复制治理器,基于perl实现,关于mysql主主复制设备的监控、故障转移和治理的一套可伸缩的脚本套件(在任>>>详细阅读
本文标题:在微服务中使用领域事件
地址:http://www.17bianji.com/lsqh/36107.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示