4.1、DDD基础概念
分类: DDD领域驱动设计实战
DDD 基础概念
领域驱动设计(Domain-Driven Design,DDD)是一种软件设计方法,通过关注业务领域来设计软件系统。本节将学习 DDD 的基础概念。
本节将学习:什么是 DDD、领域、子域、限界上下文、实体、值对象、聚合根,以及领域服务、应用服务。
什么是 DDD
DDD 定义
领域驱动设计(DDD) 是一种软件开发方法,通过关注业务领域来设计软件系统。它强调:
- 领域模型:以业务领域为核心
- 通用语言:开发人员和业务人员使用共同的语言
- 分层架构:清晰的分层结构
- 领域专家:与领域专家密切合作
DDD 目标
DDD 的目标:
- 使软件系统更贴近业务需求
- 提高代码的可维护性和可扩展性
- 促进开发团队和业务团队的沟通
领域、子域、限界上下文
领域(Domain)
领域 是业务知识的范围,是软件系统要解决的问题空间。
子域(Subdomain)
子域 是领域的组成部分,可以分为:
- 核心子域(Core Domain):业务的核心竞争力
- 支撑子域(Supporting Domain):支持核心业务
- 通用子域(Generic Domain):通用功能
限界上下文(Bounded Context)
限界上下文 是模型的边界,定义了领域模型的适用范围。
实体、值对象、聚合根
实体(Entity)
实体 是具有唯一标识的对象,通过 ID 区分。
实体特点:
- 有唯一标识(ID)
- 可变性
- 生命周期管理
示例:
public class User { private Long id; // 唯一标识 private String username; private String email; // 可变属性 }
值对象(Value Object)
值对象 是没有唯一标识的对象,通过属性值区分。
值对象特点:
- 无唯一标识
- 不可变性
- 值相等性
示例:
public class Money { private final BigDecimal amount; private final String currency; // 不可变,通过值比较 }
聚合根(Aggregate Root)
聚合根 是聚合的入口,负责维护聚合的一致性。
聚合根特点:
- 是聚合的唯一入口
- 维护聚合的不变性
- 管理聚合的生命周期
领域服务、应用服务
领域服务(Domain Service)
领域服务 是领域逻辑的封装,不属于任何实体或值对象。
领域服务特点:
- 封装领域逻辑
- 无状态
- 跨聚合操作
示例:
public class OrderDomainService { public void calculateTotal(Order order) { // 计算订单总金额的领域逻辑 } }
应用服务(Application Service)
应用服务 是应用层的服务,协调领域对象完成用例。
应用服务特点:
- 协调领域对象
- 事务管理
- 用例实现
示例:
@Service public class OrderApplicationService { @Transactional public Order createOrder(OrderCreateDTO dto) { // 协调领域对象完成订单创建 } }
DDD 分层架构
分层结构
DDD 分层:
- 用户界面层(User Interface):处理用户交互
- 应用层(Application):协调领域对象
- 领域层(Domain):业务逻辑核心
- 基础设施层(Infrastructure):技术实现
官方资源
- DDD 官方网站:https://www.domainlanguage.com/
- Eric Evans - Domain-Driven Design:https://www.domainlanguage.com/ddd/
本节小结
在本节中,我们学习了:
第一个是 DDD 定义。 领域驱动设计是一种关注业务领域的软件开发方法。
第二个是领域、子域、限界上下文。 理解业务领域的划分和边界。
第三个是实体、值对象、聚合根。 理解领域模型的基本构建块。
第四个是领域服务、应用服务。 理解不同层次的服务职责。
这就是 DDD 基础概念。理解这些概念,是进行 DDD 设计的基础。
在下一节,我们将分析商城领域,识别核心领域和子域。