首页 > 项目 > 当前页面

DDD(领域驱动设计)基础知识整理

2026-06-24 NEW个对象

📌 DDD(领域驱动设计)基础知识整理

核心思想:DDD(Domain Driven Design,领域驱动设计)是一种软件设计思想,它强调使用业务领域模型驱动系统设计和代码实现,通过领域建模降低复杂业务系统的开发和维护成本。

🎯 一、DDD 基础知识

1、DDD 的主要思想

  • 使用业务领域模型驱动应用设计与实现。
  • 开发人员与业务人员持续沟通,不断迭代业务模型。
  • 保证业务模型与代码模型保持一致。
  • 通过领域建模降低系统复杂度,提高系统可维护性。

2、什么是领域模型

模型(Model)
模型本质是一种抽象,只保留解决问题最核心的信息,忽略实现细节,从而更加清晰地表达业务语义。
领域(Domain)
Domain 表示某一类业务知识的集合。当业务不断细分后,在某个边界内需要解决的问题,就构成了一个业务领域。

3、DDD、微服务、中台、平台的区别

概念 定位
平台 一种解决某类问题的技术手段。
中台 一种业务复用理念,可以采用单体、微服务等不同架构实现。
微服务 一种系统架构,用于解决单体应用扩展性、弹性不足的问题。
DDD 一种软件设计理念,指导业务建模,同时指导微服务架构设计。

4、为什么要使用 DDD?

① 解决复杂业务系统
  • 通过限界上下文(Bounded Context)进行业务拆分。
  • 遵循关注点分离原则(Separation Of Concerns)。
  • 领域层负责业务,基础设施层负责技术实现。
  • 通过领域模型统一业务认知。
② 指导微服务架构设计

DDD 的目标是让业务架构映射到系统架构,而微服务正是按照业务边界进行拆分,因此两者天然契合。

③ 避免贫血模型

DDD 主张数据与行为封装到同一个对象中,使对象既拥有数据,又拥有业务行为,而不是仅仅充当数据载体。


🚀 二、DDD 核心概念

1、战略设计(Strategic Design)

  • 从业务视角划分领域。
  • 建立统一语言(Ubiquitous Language)。
  • 划分限界上下文(Bounded Context)。
  • 可作为微服务拆分的重要依据。

2、战术设计(Tactical Design)

  • 聚合(Aggregate)
  • 聚合根(Aggregate Root)
  • 实体(Entity)
  • 值对象(Value Object)
  • 领域服务(Domain Service)

📌 三、战略设计中的核心概念

1、领域(Domain)

  • 核心域(Core Domain):企业核心竞争力。
  • 支撑域(Supporting Domain):支撑核心业务。
  • 通用域(Generic Domain):通用能力,如短信、支付。

2、通用语言(Ubiquitous Language)

团队所有成员(产品、研发、测试、业务)统一使用相同业务术语,避免出现同一业务对象存在多种叫法。

3、限界上下文(Bounded Context)

限界上下文用于确定业务边界,同一个对象在不同领域可能具有不同语义。

例如:
商品中心:商品(Product)
仓储中心:货物(Goods)
物流中心:运输物品(Cargo)

限界上下文通常结合以下几个维度进行划分:

  • 业务边界
  • 组织边界
  • 技术边界
  • 应用边界

🔥 四、战术设计中的核心概念

概念 说明
实体(Entity) 具有唯一 ID,生命周期可变化。
值对象(VO) 没有唯一 ID,只关注属性,不可变。
聚合(Aggregate) 实体和值对象组成的一组业务对象。
聚合根(Aggregate Root) 聚合唯一入口,外部只能访问聚合根。

🏗 五、DDD 四层架构

Adapter(Controller)
    ↓
Application(应用层)
    ↓
Domain(领域层)
    ↓
Infrastructure(基础设施层)
层次 职责
Adapter Controller、MQ、RPC 接入适配。
Application 流程编排、事务控制、调用领域服务。
Domain 核心业务逻辑、聚合、实体、领域服务。
Infrastructure 数据库、缓存、MQ、RPC 等技术实现,对领域层提供防腐能力。

🚀 六、DDD 落地步骤

① 组织事件风暴(Event Storming),研发、产品、业务共同参与。


② 梳理业务流程、系统、实体、事件。


③ 根据业务价值划分领域、子领域。


④ 多轮讨论,形成统一语言。


⑤ 划分限界上下文。


⑥ 建立领域模型。


⑦ 根据领域模型拆分领域服务和微服务。
✅ 总结

DDD 的核心目标不是引入更多设计模式,而是通过业务建模解决复杂业务问题。战略设计关注业务边界,战术设计关注代码落地;领域模型是 DDD 的核心,限界上下文决定微服务边界,聚合根保证业务一致性,四层架构实现业务与技术解耦。对于复杂业务系统、业务中台和微服务架构而言,DDD 能够有效提升系统的可维护性、扩展性和团队协作效率。

相关文章

  • cglib与jdk代理的区别

    JDK 动态代理: 只支持接口代理。它通过反射机制生成一个实现了指定接口的代理类。 代理对象只能调用接口中定义的方法。 CGLib 动态代理: 通过继承方式生成代理类。它可以代理没有实现接口的类。 代理对象可以调用类中的所有方法(除了final方法)。

    NEW个对象 2025-01-18

  • 认证授权:OAuth2简介及四种授权模型详解

    认证授权:OAuth2简介及四种授权模型详解

    NEW个对象 2026-06-11

  • JVM创建对象的内存是如何分配的?如何保证线程安全?

    Java对象默认在堆中分配内存。当多个线程同时创建对象时,JVM通过CAS、自旋重试、本地线程分配缓冲区(TLAB)等机制保证内存分配过程的线程安全。对象创建过程涉及类加载检查、内存分配、零值初始化、对象头设置以及构造方法执行等多个步骤,是JVM面试中的高频考点。

    NEW个对象 2026-06-09

NEW个对象 NEW个对象
JAVA是世界上最好的语言