首页 » 99链接平台 » 「分析设计」「方法论」领域驱动设计——战术建模\u0026模型抽象(聚合实体业务领域对象)

「分析设计」「方法论」领域驱动设计——战术建模\u0026模型抽象(聚合实体业务领域对象)

萌界大人物 2024-11-02 05:06:12 0

扫一扫用手机浏览

文章目录 [+]

针对核心域内的业务概念进行领域建模,通过聚合、实体、值对象的识别,为技术实现提供参考。

核心领域模型

几个核心的模型,是对业务的高度抽象,利用抽象模型作为业务和系统实现的核心联系,领域模型封装和承载了全部的业务逻辑,并通过聚合的方式保持业务的“高内聚,低耦合”。

聚合(Aggregate),负责封装业务逻辑,通过一致性边界和统一语言,容纳实体与值对象。
聚合有一个聚合根和上下文边界。
实体(Entity),是聚合的主干,具有唯一标识和生命周期。
聚合根(Aggregate Root),是一种实体,是聚合的根节点。
值对象(Value Object),是附加业务的实体概念。

一个限界上下文内能包含多个聚合,但是聚合只能在一个上下文中,对业务问题进行最细粒度的澄清和划分。

「分析设计」「方法论」领域驱动设计——战术建模\u0026模型抽象(聚合实体业务领域对象) 99链接平台
(图片来自网络侵删)

领域建模目标是软件架构在模型层面上的内聚和解耦。
同时对实现时的服务粒度,接口能力提供指导。

实体

实体是领域模型中常见且非常重要的概念,它重要特征三点:

有属性有行为,有业务逻辑处理能力,不仅是数据模型。
有生命周期,可跟踪的持续变化,但是标识不变。
有标识且在聚合中唯一。

DDD推荐的实体是充血模型,特殊场景下也可以贫血模型,重点在于业务逻辑处理能力,可以不断丰富属于自身的行为,要保持专注,一些相关的行为可以委托给值对象或领域服务。

1,发现实体

开发团队与领域专家详细讨论出限界上下文中的通用语言,明确了概念术语。
将这些概念的名词再次抽象成为实体及其属性。
也可能是值对象,领域服务等。

2,实体的关键行为

概念术语的名词抽象为实体,那么其动词或动作将抽象为实体的行为,重点关注代表了实体的角色与职责的关键行为。
也可能是领域事件等。

3,跟踪变化

跟踪那些持续改变的状态,对于变化可能需要发布领域事件。

值对象

值对象最简洁理解是属性的集合,不具有实体的强特征,只表示起描述性作用的并且可以相互替换的概念。
在多个限界上下文之间进行集成时,也通常使用值对象。
建模过程优先选择值对象,对外干扰最少。

是否将领域概念建模成值对象,需要考虑通用语言,以及它的特征:

度量与描述领域中的一个事物。
可以作为不变量。
可以把多个不同的相关属性组合成一个概念整体。
可以替换。
不会对协作对象造成副作用。
聚合与聚合根

完成实体和值对象的抽象后,将它们组成聚合,再根据业务语义将多个聚合划定到同一个限界上下文中,并在限界上下文内完成领域建模。

聚合的作用:

业务和逻辑紧密关联的基本业务单元,实现共同的业务逻辑并保证数据一致性。
在一个上下文边界内实现业务单一职责和高内聚。
在不同的聚合之间松耦合。

聚合根的作用:

聚合根是实体,也叫根实体,聚合内的管理者,协调各实体与值对象完成共同的业务逻辑,统一了业务规则控制。
在聚合之间,是对外的接口人,接收外部请求,完成聚合之间的协同。

在限界上下文和实体之间增加聚合和聚合根的概念,让实体和值对象协同工作,在实现公共业务逻辑的时候,可以保证数据的一致性。

聚合的设计原则:

高内聚,聚合用来封装真正的不变性,将与该聚合无关的业务排除在外。
需要在内部完成事务强一致性。
聚合尽量小,使用根实体来表示聚合,只有最小数量的属性。
其他的建模为值对象或排除在外。
聚合之间通过id关联,不依赖对象费用则边界清晰。
边界之外使用最终一致性,不同聚合之间最终一致性。
类似业务可以用领域事件等方式异步修改相关的聚合,实现聚合间解耦。
在应用层实现跨聚合的调用。

也有特殊情况下会打破以上的设计原则,如用户界面的友好性,暂时无消息、定时器等技术,不得已的全局事务,查询的性能要求等。

其他辅助模型领域服务,对于有些领域概念,不能放在实体上,也不能放值对象上,就可以使用领域服务了。
它并非对等于一个应用服务,也可能是一个基础设施层的组件或Jar包。
对外有公开接口、转换服务、迷你层等来提供服务。
领域事件,需要使用最终一致性取代了事务一致性时,就可以使用领域事件来解决。
通常发生在解耦聚合之间的涉及多个聚合修改的业务,或者本聚合内稳定性与性能要求。
资源库,处理对象持久化,获取对象。
只有聚合才有相应的资源库。
标签:

相关文章