DDD(领域驱动设计)整体架构分层图
2026-06-26
NEW个对象
```
🚀 DDD(领域驱动设计)整体架构分层图
```
┌──────────────────────────────────────────────────────────────┐
│ Interface(接口层) │
│--------------------------------------------------------------│
│ Controller、REST API、RPC、MQ Consumer、OpenFeign 等 │
│ │
│ 职责:接收请求、参数校验、DTO转换 │
└──────────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ Application(应用层) │
│--------------------------------------------------------------│
│ ApplicationService │
│ Command / Query │
│ DTO │
│ │
│ 职责: │
│ • 编排业务流程 │
│ • 调用聚合根 │
│ • 控制事务 │
│ • 发布领域事件 │
│ (不写业务规则) │
└──────────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ Domain(领域层)⭐ │
│--------------------------------------------------------------│
│ Entity(实体) │
│ Value Object(值对象) │
│ Aggregate(聚合) │
│ Aggregate Root(聚合根) │
│ Domain Service(领域服务) │
│ Repository(仓储接口) │
│ Domain Event(领域事件) │
│ │
│ 职责: │
│ • 核心业务规则 │
│ • 一致性保证 │
│ • 聚合建模 │
│ • 领域行为 │
└──────────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ Infrastructure(基础设施层) │
│--------------------------------------------------------------│
│ RepositoryImpl │
│ MyBatis / JPA │
│ MySQL │
│ Redis │
│ RocketMQ / Kafka │
│ Elasticsearch │
│ RPC实现 │
│ 第三方SDK │
│ │
│ 职责: │
│ • 数据持久化 │
│ • 消息发送 │
│ • 调用外部系统 │
│ • 技术实现 │
└──────────────────────────────────────────────────────────────┘ ```
│ Interface(接口层) │
│--------------------------------------------------------------│
│ Controller、REST API、RPC、MQ Consumer、OpenFeign 等 │
│ │
│ 职责:接收请求、参数校验、DTO转换 │
└──────────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ Application(应用层) │
│--------------------------------------------------------------│
│ ApplicationService │
│ Command / Query │
│ DTO │
│ │
│ 职责: │
│ • 编排业务流程 │
│ • 调用聚合根 │
│ • 控制事务 │
│ • 发布领域事件 │
│ (不写业务规则) │
└──────────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ Domain(领域层)⭐ │
│--------------------------------------------------------------│
│ Entity(实体) │
│ Value Object(值对象) │
│ Aggregate(聚合) │
│ Aggregate Root(聚合根) │
│ Domain Service(领域服务) │
│ Repository(仓储接口) │
│ Domain Event(领域事件) │
│ │
│ 职责: │
│ • 核心业务规则 │
│ • 一致性保证 │
│ • 聚合建模 │
│ • 领域行为 │
└──────────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ Infrastructure(基础设施层) │
│--------------------------------------------------------------│
│ RepositoryImpl │
│ MyBatis / JPA │
│ MySQL │
│ Redis │
│ RocketMQ / Kafka │
│ Elasticsearch │
│ RPC实现 │
│ 第三方SDK │
│ │
│ 职责: │
│ • 数据持久化 │
│ • 消息发送 │
│ • 调用外部系统 │
│ • 技术实现 │
└──────────────────────────────────────────────────────────────┘ ```
📌 Domain(领域层)内部结构
```
Order(Aggregate Root 聚合根)
│
├──────── OrderItem(Entity 实体)
│
├──────── Address(Value Object 值对象)
│
├──────── Coupon(Value Object 值对象)
│
├──────── Domain Service(领域服务)
│
└──────── Repository(仓储接口) ```
│
├──────── OrderItem(Entity 实体)
│
├──────── Address(Value Object 值对象)
│
├──────── Coupon(Value Object 值对象)
│
├──────── Domain Service(领域服务)
│
└──────── Repository(仓储接口) ```
📌 一次请求执行流程
```
HTTP请求
↓
Controller
↓
ApplicationService(编排流程)
↓
Order(聚合根)
↓
OrderItem / Address / Coupon(领域对象)
↓
Repository(接口)
↓
RepositoryImpl(MyBatis)
↓
MySQL ```
↓
Controller
↓
ApplicationService(编排流程)
↓
Order(聚合根)
↓
OrderItem / Address / Coupon(领域对象)
↓
Repository(接口)
↓
RepositoryImpl(MyBatis)
↓
MySQL ```
💡 DDD一句话理解:
Interface 层负责接收请求;
Application 层负责业务流程编排;
Domain 层负责真正的业务规则,是整个系统的核心;
Infrastructure 层负责数据库、缓存、MQ、RPC 等技术实现。
整个系统围绕 聚合(Aggregate) 建模,通过 聚合根(Aggregate Root) 保证业务一致性,Repository 负责聚合的持久化,这也是 DDD 最经典、最常见的工程落地方式。
```
Interface 层负责接收请求;
Application 层负责业务流程编排;
Domain 层负责真正的业务规则,是整个系统的核心;
Infrastructure 层负责数据库、缓存、MQ、RPC 等技术实现。
整个系统围绕 聚合(Aggregate) 建模,通过 聚合根(Aggregate Root) 保证业务一致性,Repository 负责聚合的持久化,这也是 DDD 最经典、最常见的工程落地方式。
相关文章
-
基于Redis限制短信的发送频率
需要大概是这样的: 短信验证码登录,最近15分钟内只能发2条短信。 类似于滑动窗口的限流机制。 那么开发吧,自己开发的好像没什么思路。
NEW个对象 2025-03-15
-
MySQL主键是有序的好,还是无序的好?
MySQL主键是有序的好,还是无序的好?
NEW个对象 2026-06-25
-
OAuth2 授权模式的前置流程详解
OAuth2 授权模式的前置流程详解
NEW个对象 2026-06-13
NEW个对象
JAVA是世界上最好的语言