# 什么是领域驱动设计（DDD）

URL: https://caijiao.org/ddd/chapter1/what-is-ddd
Source: docs/ddd/chapter1/what-is-ddd.md
Description: 领域驱动设计（DDD）是一种以业务为核心的软件建模方法，帮助开发者更好地应对复杂业务系统的设计挑战。

领域驱动设计（Domain-Driven Design，简称 DDD）是一种以 **业务需求和领域知识为核心驱动** 的软件开发方法论，由 Eric Evans 在其经典著作《Domain-Driven Design: Tackling Complexity in the Heart of Software》中提出。

DDD 的目标是通过建立紧密贴合业务的模型，提升系统的可维护性、可扩展性与对复杂业务变化的适应能力。

## ✳️ 核心思想

### 1. 领域为核心（Focus on the Domain）

DDD 强调将**业务领域**作为软件开发的出发点，而不是数据库结构或技术框架。业务逻辑是系统的核心，模型设计应围绕业务展开。

### 2. 通用语言（Ubiquitous Language）

通用语言是一种**团队之间共享的语言**，由开发人员、领域专家共同参与定义。  
它贯穿于代码、文档、设计讨论中，确保团队成员对业务模型的理解保持一致。

### 3. 模型驱动设计（Model-Driven Design）

领域模型不仅是业务概念的抽象，还应通过代码表现出来，并在项目开发过程中不断演进和优化。  
模型是业务与技术之间的桥梁，是 DDD 的核心工具。

### 4. 限界上下文（Bounded Context）

在大型系统中，将不同的业务模型划分到**明确的上下文边界**内，有助于管理复杂性，防止模型泛化或失控。  
每个限界上下文内可以有独立的数据结构、服务逻辑，甚至技术选型。

## ✅ 适用场景

- 复杂、变化频繁的业务系统；
- 团队中有清晰的领域专家角色；
- 需要长期维护和扩展的核心系统。

## 🚫 不适用场景

- 简单的 CRUD 系统或原型项目；
- 小型项目，业务规则较少；
- 开发周期非常短，团队协作有限的项目。

---

DDD 并非一种架构，也不是某种框架，而是一种思考和设计复杂软件系统的方法。它帮助开发者在变化频繁的业务中构建**灵活、稳固、可演进**的模型结构。
