DDD(领域驱动设计)学习总结

目录

1 一些你需要了解的概念

1.1 什么是 DDD?

1.2 领域、子域、核心域、通用域和支撑域

1.3 其他概念

1.4 模型形态介绍

2 简述从零开始构建领域模型

2.1 产品愿景

2.2 业务场景分析

2.3 领域建模

2.4 服务拆分

3 从方法论到代码落地,看看DDD在代码层面上的映射

3.1 服务架构图

3.2 代码架构

4 杂谈

5 相关文档


1 一些你需要了解的概念

先上经典领域模型图:

1.1 什么是 DDD?

  • DDD(Domain Driven Design):是一种处理高度复杂领域的设计思想,它试图分离技术实现的复杂性,并围绕业务概念构建领域模型来控制业务的复杂性,以解决软件难以理解,难以演进的问题。DDD 不是架构,而是一种架构设计方法论,它通过边界划分将复杂业务领域简单化,帮我们设计出清晰的领域和应用边界,可以很容易地实现架构演进。

  • DDD 包括战略设计和战术设计两部分。战略设计主要从业务视角出发,建立业务领域模型,划分领域边界,建立通用语言的限界上下文,限界上下文可以作为微服务设计的参考边界。战术设计则从技术视角出发,侧重于领域模型的技术实现,完成软件开发和落地,包括:聚合根、实体、值对象、领域服务、应用服务和资源库等代码逻辑的设计和实现。

1.2 领域、子域、核心域、通用域和支撑域

  • 领域:领域就是用来确定范围的,范围即边界,这也是 DDD 在设计中不断强调边界的原因。DDD 的领域就是这个边界内要解决的业务问题域

  • 子领域:领域可以进一步划分为子领域。我们把划分出来的多个子领域称为子域,每个子域对应一个更小的问题域或更小的业务范围。甚至于业务复杂的情况下,子域还可以做进一步的划分,称为子子域,这依赖实际情况来定。

接下来根据子域的不同类型就可以划分出核心域、通用域和支撑域了。

  • 核心域:是决定产品和公司核心竞争力的子域,它是业务成功的主要因素和公司的核心竞争力。

  • 通用域:没有太多个性化的诉求,同时被多个子域使用的通用功能子域。

  • 支撑域:既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域。简单点说既不属于核心域也不输于通用域的子域就属于支撑域。

我们以桃树的生物学体系建立过程为例。

第一步:确定研究对象,即研究领域,这里是一棵桃树。

第二步:对研究对象进行细分,将桃树细分为器官,器官又分为营养器官和生殖器官两种。其中营养器官包括根、茎和叶,生殖器官包括花、果实和种子。桃树的知识体系是我们已经确定要研究的问题域,对应 DDD 的领域。根、茎、叶、花、果实和种子等器官则是细分后的问题子域。这个过程就是 DDD 将领域细分为多个子域的过程。

第三步:对器官进行细分,将器官细分为组织。比如,叶子器官可细分为保护组织、营养组织和输导组织等。这个过程就是 DDD 将子域进一步细分为多个子域的过程。

第四步:对组织进行细分,将组织细分为细胞,细胞成为我们研究的最小单元。细胞之间的细胞壁确定了单元的边界,也确定了研究的最小边界。

再说子域类型的划分。不同的人对桃树的理解是不同的。如果这棵桃树生长在公园里,在园丁的眼里,他喜欢的是“人面桃花相映红”的阳春三月,这时花就是桃树的核心域。但如果这棵桃树生长在果园里,对果农来说,他则是希望在丰收的季节收获硕果累累的桃子,这时果实就是桃树的核心域。在不同的场景下,不同的人对桃树核心域的理解是不同的,因此对桃树的处理方式也会不一样。园丁更关注桃树花期的营养,而果农则更关注桃树落果期的营养,有时为了保证果实的营养供给,还会裁剪掉疯长的茎和叶(通用域或支撑域)。

总结一下:关于子域类型的划分并不是固定的,需要根据实际业务场景去识别,只有了解了业务中所真正关注的问题点才能做好划分。核心域、支撑域和通用域的主要目标是:通过领域划分,区分不同子域在公司内的不同功能属性和重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度也会不一样。

1.3 其他概念

1.3.1 限界上下文

我们可以将限界上下文拆解为两个词:限界和上下文。限界就是领域的边界,而上下文则是语义环境。

通过领域的限界上下文,我们就可以在统一的领域边界内用统一的语言进行交流。

为了避免同样的概念或语义在不同的上下文环境中产生歧义,DDD 在战略设计上提出了“限界上下文”这个概念,用来确定语义所在的领域边界。

举个例子:正如电商领域

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值