简单易懂的方式聊聊 DDD(领域驱动设计)
一句话理解 DDD: DDD 是一种软件开发方法,核心思想是聚焦业务领域本身,让软件设计紧密围绕业务专家的心智模型和复杂业务规则展开,最终构建出能清晰反映业务本质、易于理解和维护的软件。
🧩 核心概念与简单例子
想象你在开发一个电商系统:
- 领域: 你要解决的问题空间,这里就是“电商”。它包含了用户、商品、订单、库存、支付、物流等一系列概念。
- 通用语言: DDD 强调业务人员(产品经理、业务专家)和开发人员使用一套完全一致的语言来沟通和描述系统。比如:
- 业务说:“顾客下单后,如果库存不足,需要标记订单为‘待补货’,并通知顾客。”
- 开发设计代码时,就直接有
Order
类,里面有status
属性(值可能是PENDING_RESTOCK
),并有相应的checkInventory()
和notifyCustomer()
方法。 - 数据库表设计也反映这些概念(
orders
表有status
字段)。 - 好处: 避免“你说的下单和我理解的下单不是一回事”的沟通鸿沟,需求到设计的转换更准确。
- 限界上下文: 电商这个大领域太宽泛了。DDD 会把它拆分成更小、更内聚、语义清晰的子领域,每个子领域有自己的模型和语言。
- 商品上下文: 关心商品信息、分类、属性、上下架状态。
- 订单上下文: 关心订单创建、状态流转、支付、物流信息。
- 库存上下文: 关心商品的实时库存数量、锁定、扣减、预警。
- 用户上下文: 关心用户信息、地址、账户安全。
- 好处: 每个模块(微服务或包)专注于自己的核心职责,内部高度内聚,外部通过定义好的接口交互,降低耦合。修改库存逻辑不会轻易影响到订单模块。
- 核心域与子域: 在电商