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

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

作者: 白板时钟 | 来源:发表于2020-05-25 00:01 被阅读0次

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

    面向过程的事务脚本模式

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

    面向对象的领域建模模式

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

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

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

    好处:

    • 易于理解和维护
    • 容易测试
    • 面向对象的设计更容易扩展

    关于领域驱动设计

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

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

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

    聚合的规则

    • 只能引用聚合根,客户端只能通过调用聚合跟上的方法来更新聚合。
    • 聚合间的引用必须使用主键。也可以保证聚合是松耦合的。
    • 在一个事务中,只能创建或者更新一个聚合。多个聚合的更新,应该使用Saga操作。

    领域事件

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

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

    • 服务之间的数据一致性
    • 通知维护副本的服务,元数据已经变更
    • 需要将状态更新发送给用户

    怎样识别领域事件

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

    谁来发送领域事件

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

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ghisahtx.html