1Implementing Domain-Driven Design

DDD入门

领域驱动设计

统一语言领域模型限界上下文战略设计

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第1章:DDD入门(Introduction to DDD)

一、导读

1.1 本章学习目标

第1章介绍领域驱动设计(DDD)的核心理念——用业务领域来指导软件设计。

本章的核心学习目标包括:

  • 理解 DDD 的核心思想:领域模型是软件的核心
  • 掌握统一语言(Ubiquitous Language)
  • 理解限界上下文(Bounded Context)
  • 区分战略设计和战术设计

1.2 为什么本章如此重要

DDD 不是技术框架,而是一种设计方法论。它解决的核心问题是:如何让软件真实反映业务现实?当业务复杂到一定程度时,技术驱动的设计会失败——只有领域驱动的设计才能应对。

1.3 核心问题引导

什么是领域模型?它和技术模型有什么区别?

统一语言为什么如此重要?

限界上下文解决了什么问题?

DDD 的战略设计和战术设计分别关注什么?


二、核心概念详解

2.1 领域模型

领域模型:对业务领域的简化和抽象表示

不是:
- 数据库表结构
- API 接口定义
- 技术架构图

而是:
- 业务概念和关系的表达
- 业务规则和约束的体现
- 业务行为的抽象

2.2 统一语言

java
// 不好的设计:技术语言
class UserDTO {
    private String name;
    private String email;
    private int status;    // 0=active, 1=inactive
}

// 好的设计:统一语言(业务语言)
class Customer {
    private CustomerName name;
    private EmailAddress email;
    private CustomerStatus status;    // ACTIVE, INACTIVE, SUSPENDED
    
    boolean isActive() { return status == CustomerStatus.ACTIVE; }
    void suspend() { status = CustomerStatus.SUSPENDED; }
}

2.3 限界上下文

限界上下文:领域模型的边界

同一个概念在不同上下文中有不同含义:
- 电商上下文:Product(商品,有价格、库存)
- 物流上下文:Product(货物,有重量、体积)
- 财务上下文:Product(资产,有折旧、价值)

每个限界上下文有自己的:
- 统一语言
- 领域模型
- 数据模型
- 团队

2.4 战略设计 vs 战术设计

战略设计(Strategic Design):
- 限界上下文的划分
- 上下文之间的关系(Context Map)
- 团队的组织和沟通

战术设计(Tactical Design):
- 实体(Entity)
- 值对象(Value Object)
- 聚合(Aggregate)
- 领域服务(Domain Service)
- 领域事件(Domain Event)
- 仓储(Repository)

三、实战案例

3.1 案例一:电商系统的限界上下文

电商系统的限界上下文:

1. 商品目录(Catalog)
   - Product, Category, Brand
   - 关注:商品描述、分类、搜索

2. 库存(Inventory)
   - StockItem, Warehouse
   - 关注:数量、位置、补货

3. 订单(Order)
   - Order, OrderLine, OrderStatus
   - 关注:下单、支付、发货

4. 支付(Payment)
   - Payment, Transaction, Refund
   - 关注:支付渠道、对账、退款

5. 物流(Shipping)
   - Shipment, TrackingEvent
   - 关注:配送、跟踪、签收

每个上下文独立开发、独立部署、独立数据库
通过上下文映射(Context Map)定义交互方式

四、本章小结

领域模型:业务领域的抽象表示,是软件的核心。

统一语言:开发团队和业务专家共享的语言。

限界上下文:领域模型的边界,统一语言的作用范围。

战略设计:上下文划分和关系。战术设计:实体、值对象、聚合等。


五、思考与练习

为一个你熟悉的业务系统识别限界上下文。

统一语言在实际项目中如何推广?

限界上下文和微服务有什么关系?


1/7DDD入
0%