Skip to main content

领域驱动设计

  • 模型是针对领域的抽象模拟,建模是针对特定问题建立领域的合理模型。
  • 复杂性来源于业务本身的复杂性和设计引入(由于技术实现)的复杂性。
  • 领域驱动设计通过模型分解和模型驱动设计控制复杂性。

DDD 的核心思想和解决的痛点问题

什么是模型和建模?

  • 模型是对领域的抽象和模拟,通过这种方式,就可以描述零售领域的几个概念的。

屏幕截图 2024-01-08 224531

  • 建模是针对特定问题建立领域的合理模型。对于软件系统来说,首先是要建立模型,然后才将模型转换成代码。

软件系统的复杂性来自哪里?

image-20240108232126615

  • 业务复杂导致模型复杂
  • 技术实现引入额外复杂性

传统开发模式面对这两种复杂性是无能为力的。

业务复杂导致模型复杂

image-20240108232252359

image-20240108232339596

用一个模型去应对多个领域的问题时,模型就会变得错综复杂,这就是传统的面向对象的思想存在的问题。当业务变得非常复杂的时候,如果还是采用面向对象的思想去建模的时候,复杂性就会变得不可控。

技术实现引入额外复杂性

image-20240108233330879

如果商品搜索需要和门店数据产生关联,数据接入服务在产生数据的时候,需要构建商品搜索需要的数据(门店商品,让商品数据带上门店数据的地址、坐标、名称),这样的设计除了为商品接入服务引入额外的复杂性之外,整个系统也会相对变复杂,因为会引入一个概念:门店商品

DDD 的关键思想以及如何应对多变的复杂性?

DDD 核心思想一: 模型分解

DDD 引入了两个领域划分和限界上下文,将复杂的系统划分为不同的模型,用不同的模型(子领域)应对不同的问题。

首先,通过领域划分,可以将系统划分为不同的子领域,然后对不同的子领域分别进行建模,对于人民币这个例子来说,在不同的子领域的模型里面,都是不同的概念,处于不同的限界上下文。

领域划分是面向与问题空间的,限界上下文是面向与解决方案空间的。

image-20240108232634004

DDD 核心思想二: 模型驱动设计

通过分层架构隔离领域层、仔细选择模型和设计方案等措施保持实现与模型一致。用于解决设计领域复杂的问题。

image-20240108234023615