4.1DDD基础概念

分类: DDD领域驱动设计实战

DDD 基础概念

领域驱动设计(Domain-Driven Design,DDD)是一种软件设计方法,通过关注业务领域来设计软件系统。本节将学习 DDD 的基础概念。

本节将学习:什么是 DDD、领域、子域、限界上下文、实体、值对象、聚合根,以及领域服务、应用服务。

什么是 DDD

DDD 定义

领域驱动设计(DDD) 是一种软件开发方法,通过关注业务领域来设计软件系统。它强调:

  1. 领域模型:以业务领域为核心
  2. 通用语言:开发人员和业务人员使用共同的语言
  3. 分层架构:清晰的分层结构
  4. 领域专家:与领域专家密切合作

DDD 目标

DDD 的目标:

  • 使软件系统更贴近业务需求
  • 提高代码的可维护性和可扩展性
  • 促进开发团队和业务团队的沟通

领域、子域、限界上下文

领域(Domain)

领域 是业务知识的范围,是软件系统要解决的问题空间。

子域(Subdomain)

子域 是领域的组成部分,可以分为:

  1. 核心子域(Core Domain):业务的核心竞争力
  2. 支撑子域(Supporting Domain):支持核心业务
  3. 通用子域(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 分层:

  1. 用户界面层(User Interface):处理用户交互
  2. 应用层(Application):协调领域对象
  3. 领域层(Domain):业务逻辑核心
  4. 基础设施层(Infrastructure):技术实现

官方资源

本节小结

在本节中,我们学习了:

第一个是 DDD 定义。 领域驱动设计是一种关注业务领域的软件开发方法。

第二个是领域、子域、限界上下文。 理解业务领域的划分和边界。

第三个是实体、值对象、聚合根。 理解领域模型的基本构建块。

第四个是领域服务、应用服务。 理解不同层次的服务职责。

这就是 DDD 基础概念。理解这些概念,是进行 DDD 设计的基础。

在下一节,我们将分析商城领域,识别核心领域和子域。