《微服务架构设计模式》读书笔记---第五章:微服务架构中的业务逻

2020-05-25  本文已影响0人  白板时钟

组织业务逻辑主要有两种方法:面向过程的事务脚本模式面向对象的领域建模模式

面向过程的事务脚本模式

这种方式的一个重要的特征就是,实现行为的类和存储状态的类是分开的。脚本通常位于服务类中,例如Order Service类,使用Order Dao访问数据库,而数据对象Order类,是一个纯数据类。
这种模式,适合于简单的业务场景,如果场景变得复杂,那么代码将变得难以维护。

面向对象的领域建模模式

对于复杂的业务逻辑,最好使用领域模型模式,进行面向对象的设计。

领域模型:将业务逻辑组织为具有状态和行为的类构成的对象模型。

这种方式依然存在Order Service这样的服务类,但服务类仅提供针对每个请求的方法,大量的业务逻辑以调用对象的行为完成,通常这些服务类比较简单。

好处:

关于领域驱动设计

领域驱动设计(Domain-Drive Design,DDD)是对面向对象设计的改进,是开发复杂业务逻辑的一种方法。

DDD中的聚合,是一个边界内的领域对象的集群,可以将其视为一个单元,他由根实体和可能的额一个或多个其他实体和值对象组成。例如Order聚合,就由Order实体、一个或多个OrderLineItem值对象一起其他值对象(Address,Payment Information)组成。

聚合还阐述了加载、更新和删除等操作的范围,这些操作作用于整个聚合,而非部分聚合。聚合通常从数据库中完整加载。

聚合的规则

领域事件

领域事件是聚合发生的事情。它由领域模型中的一个类表示。Order聚合状态变化时间包括Order Create,Order Cancelled, Order Shipped等

为什么需要领域事件
其他协作方,对聚合状态的更改,感兴趣。例如

怎样识别领域事件

  1. 从需求中寻找领域事件
  2. 使用事件风暴,识别领域事件和聚合

谁来发送领域事件

  1. 在服务中发送领域事件。在聚合状态发生改变后,返回给服务一个事件列表。服务通过依赖注入,获取消息传递API的引用,使用这个引用发送事件列表中的事件。
  2. 聚合根在一个内部字段中积累保存时间。服务检索这些事件。

发送领域事件,也需要注意可靠性。服务需要使用事务性消息来发布事件,确保领域事件作为更新数据库中聚合的事务的一部分对外发布。

上一篇下一篇

猜你喜欢

热点阅读