DDD(领域驱动设计)基础知识整理
📌 DDD(领域驱动设计)基础知识整理
🎯 一、DDD 基础知识
1、DDD 的主要思想
- 使用业务领域模型驱动应用设计与实现。
- 开发人员与业务人员持续沟通,不断迭代业务模型。
- 保证业务模型与代码模型保持一致。
- 通过领域建模降低系统复杂度,提高系统可维护性。
2、什么是领域模型
模型本质是一种抽象,只保留解决问题最核心的信息,忽略实现细节,从而更加清晰地表达业务语义。
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 四层架构
↓
Application(应用层)
↓
Domain(领域层)
↓
Infrastructure(基础设施层)
| 层次 | 职责 |
|---|---|
| Adapter | Controller、MQ、RPC 接入适配。 |
| Application | 流程编排、事务控制、调用领域服务。 |
| Domain | 核心业务逻辑、聚合、实体、领域服务。 |
| Infrastructure | 数据库、缓存、MQ、RPC 等技术实现,对领域层提供防腐能力。 |
🚀 六、DDD 落地步骤
↓
② 梳理业务流程、系统、实体、事件。
↓
③ 根据业务价值划分领域、子领域。
↓
④ 多轮讨论,形成统一语言。
↓
⑤ 划分限界上下文。
↓
⑥ 建立领域模型。
↓
⑦ 根据领域模型拆分领域服务和微服务。
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