ToB企服应用市场:ToB评测及商务社交产业平台

标题: 为什么我越来越喜好用DDD — DDD架构篇(1) [打印本页]

作者: 泉缘泉    时间: 2024-10-30 16:52
标题: 为什么我越来越喜好用DDD — DDD架构篇(1)
Hello DDD

DDD的概念

什么是充血模型?
范畴内都包罗什么?
实体、聚合、值对象,有什么区别?
这些概念,也是战术设计过程中非常紧张的知识项,搞清楚它们才能做 DDD 设计。
充血模型

充血模型,指将对象的属性信息与举动逻辑聚合到一个类中,常用的本领如在对象内提供属于当前对象的信息校验、拼装缓存Key、不含服务接口调用的逻辑处理等。

范畴模型

范畴模型,指特定业务范畴内,业务规则、策略以及业务流程的抽象和封装。在设计本领上,通过风暴模型拆分范畴模块,形成边界上下文。最大的区别在于把原有的浩繁 Service + 数据模型的方式,拆分为独立的有边界的范畴模块。每个范畴内创建自身所属的;范畴对象(实体、聚合、值对象)、仓储服务(DAO 操作)、工厂、端口适配器Port(调用外部接口的本领)等。
那么,现在这里有几个概念;范畴服务、范畴对象、仓储界说、事件消息、端口适配器。我们先来看他们是怎么从贫血模型演变过来的,在细分解说每个概念。

实体、聚合、值对象

原本在贫血模型下的开辟,常常是不会特殊在意一个方法的出入参对象的,也经常是很多个服务共用一个VO对象作为入参,只要这个对象能把我需要的属性信息带进来就可以了。
但在 DDD 的范畴模型设计下,范畴对象的设计是非常面向对象的。而且在整个风暴事件的四色建模过程也是在以范畴对象为驱动进行的。
实体、聚合、值对象,三者位于每个范畴下的范畴对象内,服务于范畴内的范畴服务。三个对象界说具体如下;

实体
是依托于长期化层数据以范畴服务功能目的为引导设计的范畴对象。长期化PO对象是原子类对象,不具有业务语义,而实体对象是具有业务语义且有唯一标识的对象,跟随于范畴服务方法的全生命周期对象。如;用户PO长期化对象,会涵盖,用户的开户实体、授信实体、额度实体对象。也包罗如商品下单时候的购物车实体对象。这个对象也通常是范畴服务方法的入参对象。
值对象
这个对象在范畴服务方法的生命周期过程内是不可变对象,也没有唯一标识。它通常是配合实体对象利用。如为实体对象提供对象属性值的描述,好比;一个公司雇员的级别值对象,一个下单的商品收货的四级地址信息对象。所以在开辟值对象的时候,通常不会提供 setter 方法,而是提供构造函数大概 Builder 方法来实例化对象。这个对象通常不会独立作为方法的入参对象,但做可以独立作为出参对象利用。
聚合
当你对数据库的操作需要利用到多个实体时,可以创建聚合对象。一个聚合对象,代表着一个数据库事件,具有事件划一性。聚合中的实体可以由聚合提供创建操作,实体也被称为聚合根对象。一个订单的聚合,会涵盖;下单用户实体对象、订单实体、订单明细实体和订单收货四级地址值对象。而谁人作为入参的购物车实体对象,已经被转换为实体对象了。—— 聚合内事件划一性,聚合外最终划一性。
仓储和适配器

在 DDD 的设计方法中,范畴层做到了只关心范畴服务实现。最能体现这样设计的就是仓库和适配器的设计。通常在 Service + 数据模型的设计中,会在 Service 中引入 Redis、RPC、配置中心等各类其他外部服务。但在 DDD 中,通过仓储和适配器以及根本设施层的界说,解耦了这部分内容。

Repository模式是DDD(范畴驱动设计)中的一个核心概念,它有助于保持范畴模型的聚焦和清晰,同时提供了灵活、可测试和可维护的数据访问策略。
仓储解耦的本领利用了依赖倒置的设计,全部范畴需要的外部服务,不在直接引入外部的服务,而是通过界说接口的方式,让根本设施层实现范畴层接口(仓储/适配器)的方式来处理。
那么也就是根本设置层负责原则对接数据库、缓存、配置中心、RPC接口、HTTP接口、MQ推送等各项资源,并承接范畴服务的接口调用各项服务为范畴层提供数据能力。
同时这也会体现出,范畴层的实现是具有业务语义的,而到了根本设施层则没有业务语义,都是原子的方法。通过原子方法的组合为范畴业务语义提供支撑。
范畴编排

在 DDD 中,每一个范畴都是边界上下文拆分的独立结果,而实现业务流程的功能则需要串联各个范畴模块提供一整条链路的完整服务。所以也常说范畴内事件划一性,范畴外最终划一性。
同时这些范畴模块由于是独立的,所以也可以被复用。在差别的场景功能诉求下,可以选择差别的范畴模块进行组装,这个过程就像搭积木一样。
但这里有一个取舍,如果项目相对来说并不大,也没有太多的编排处理。那么可以直接让触发器层对接范畴层,减少编排层后,编码会更加便捷。
触发器

在全部的模型都界说完成后,范畴业务被串联了。那么接下来则是利用,而利用的方式可以包罗;接口(http/rpc)、消息监听、定时任务等方式,这些方式统一被界说为触发动作。
由触发发起对编排功能的调用处理。如;定时任务做信贷的计息、开户乐成消息通知返利优惠券、提供接口让外部调用授信逻辑等。这些都是触发动作。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4