DDD概要

一、DDD是什么

DDD是Eric Evans 于2004年提出的一种软件设计方法,Domain Drive Design,简称DDD,在软件设计领域被广泛应用。

DDD的核心思路是强调“领域”在软件设计的作用,领域是有边界的、有重点的、可划分的,它是对一定范围内业务事实的抽象,与技术实现无关。划定领域有如下好处:

1、领域限定了问题空间,定义了通用语言,使得业务讨论更好聚焦,不会跑偏。

2、领域模型将技术实现直接导向业务实质,使得软件设计直接反映业务,更好应对业务变化。

二、DDD基本概念

1、限界上下文

限界上下文是语义和语境的边界,当限界上下文被作为关键战略举措进行开发时,即为核心域。

2、通用语言

通用语言是对领域内概念的一致性描述,领域专家、软件专家都基于通用语言讨论业务模型,以避免出现理解偏差。

3、子域

子域代表一个单一的、有逻辑的领域模型。通常限界上下文和子域的一一对应。子域分为核心子域、支撑子域和通用子域。

4、聚合和聚合根

聚合是多个强关联的实体和值对象的集合,一个聚合对应一个紧凑的领域模型。聚合是持久化的基本单位,这是为了确保完整性,避免内部一致性问题。

聚合根是聚合中的核心实体,外部需要访问聚合内的实体时,只能通过聚合根访问。

三、领域对象和领域服务

1、领域对象

领域对象包括实体和值对象构建领域模型,实际是勾画实体及实体之间的关系,值对象一般作为实体的属性。

实体是需要唯一标识的领域概念,而值对象没有唯一标识。如Customer实体,它有个属性Address,张三和李四两个Customer有各自的唯一标识,但他们的Address值对象可以一样。

2、领域服务

领域服务是对领域对象的状态转移和关系的服务实现,以及对领域对象操作入口。

除领域服务外,还有应用服务和基础服务。应用服务是直接暴露给用户层的入口,它依赖于领域服务。基础服务一般是无业务属性的简单操作。如支付域的转账服务,其应用服务要做转账并给用户发短信,这里转账是领域服务,发短信只是基础服务,与支付域领域模型无关。

应用服务和领域服务的分工可以看六边形架构(参考 https://www.cnblogs.com/zhongpan/p/7606430.html),如果从应用的角度看,API和SPI应该都是从应用服务中暴露出去,应用服务中不包含业务逻辑·,以避免领域逻辑泄漏;如果领域服务有任何依赖,只能向内依赖,不能向外依赖。

三、资源库Repository

Repository是在领域层和数据访问层之间,意义在于领域层可以不直接关心数据存储映射和实现。比如要更好ORM组件,会在Repository实现。

Repository和数据访问层的区别在于,Repository要体验Domain的意图和约束,而数据访问层只关心存储映射和实现。

四、领域事件

领域事件是发生在特定领域中的事件,领域事件会驱动同一领域中其他部分发生后续动作。领域事件是一种基于事件的架构,好处是可以将流程解耦。

为什么将领域事件作为DDD的一部分而不只是单纯地把它作为一个技术方案?因为这些事件本身是基于业务场景,有强业务含义的,因此需要在领域建模的时候把它刻画出来。

参考:

https://www.cnblogs.com/netfocus/archive/2011/10/10/2204949.html

https://www.cnblogs.com/laozhang-is-phi/p/9806335.html#autoid-1-0-0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值