一、什么是领域驱动设计?

领域驱动设计(Domain Driven Design,DDD)作为一个针对大型负责业务系统的领域建模方法体系,它改变了传统软件开发工程师面向数据库建模的方式,通过面向领域的思维方式,将要解决的业务概念和业务规则等内容提炼为领域知识,然后借由不同的建模范式将这些领域知识抽象为能够反应真实世界的领域模型。

简而言之,传统的建模方式是面向数据库,而DDD是面向业务概念和规则。

二、领域驱动设计有哪些基本概念?

领域驱动设计主要包括以下3类基本概念:
① 元模型
② 问题空间和解空间
③ 战略设计和战术设计

1、 元模型有哪些?

领域驱动设计元模型 (1)

领域驱动设计需要多方参与共同建设,包括领域专家、架构师、开发等角色,那么首先必须要先统一语言,并在此基础上提炼多个核心子领域,并根据核心子领域的共性提出通用子领域。

通过子领域划分限界上下文,可以简单的理解一个子领域就是一个限界上下文,从而达到分而治之的效果,将完整系统划分为多个模块,进而聚焦到限界上下文内部,通过模型驱动设计进行实体、值对象、聚合、工厂、领域事件以及领域服务等设计。

此外限界上下文之间存在联系,通过上下文映射来表达限界上下文之间的协作关系,有8种映射模式:
① 共享内核
② 客户方/供应方
③ 尊奉者
④ 开放主机服务
⑤ 发布语言
⑥ 分离方式
⑦ 防腐层
⑧ 大泥球

2、什么是问题空间?什么是解空间?

软件系统是真实世界的一个抽象模型,软件系统要实现的需求功能就是问题空间,而围绕问题空间产出的设计方案就是解空间。

在DDD中,运用统一语言,识别出核心子领域、通用子领域以及支撑子领域来描述需求问题,从而划分问题空间。而其他的设计元模型都是围绕着解空间进行开展的,包括模型驱动设计、限界上下文和上下文映射等。

3、什么是战略设计?什么是战术设计?

战略设计表示DDD的整体设计,包括对问题空间进行合理的分解,识别出核心子领域、通用子领域和支撑子领域;并根据不同的子领域划分限界上下文以及它们之间的协作关系。

战术设计则聚焦于限界上下文内部的详细设计,包括实体、值对象、领域服务以及分层架构方式等,通过战术设计,让模型更加容易落地实现。

三、领域驱动设计的过程是怎样的?

领域驱动设计过程

① 识别问题空间
运用统一语言对业务需求进行讨论分析,识别问题空间,并把问题空间划分出核心子领域、通用领域和支撑领域。

② 限界上下文设计
根据划分的子领域,设计不同的限界上下文以及它们之间的协作关系,并采用分层架构将限界上下文内部的领域隔离出来。

③ 落地实现
针对每个限界上下文进行模型驱动设计,并在此模型上进行编码实现,在编码过程中不断进行重构优化,并识别出隐式概念,进而优化模型和调整限界上下文。

打赏
支付宝 微信
上一篇 下一篇