请解释领域驱动设计(Domain Driven Design)与高层设计(High Level Design)的区别
领域驱动设计(DDD)与高层设计(HLD)的区别解释
先搞懂两个设计到底是什么
高层设计(High Level Design, HLD)
高层设计就是系统的全局架构蓝图,站在上帝视角规划系统的整体骨架。比如做一个外卖平台,HLD会明确:
- 系统分为用户端、商家端、配送端、后台管理端这几个大模块
- 每个模块用什么技术栈(比如用户端用React,后端用Java Spring)
- 模块之间怎么通信(比如用户下单后,订单模块调用支付模块接口)
- 整体的部署架构(比如用微服务还是单体,数据库怎么分库分表)
它的核心是解决「系统各个部分怎么组合起来跑通」的问题,不会纠结某个模块里的具体业务细节(比如订单里的满减规则怎么算)。
领域驱动设计(Domain Driven Design, DDD)
DDD是一种围绕业务核心逻辑构建系统的方法,核心是把业务专家的“行话”转化为代码里的模型。还是以外卖订单为例:
- 业务专家说“订单提交后15分钟未支付自动取消,取消后要恢复库存”,DDD就会把这个规则转化为订单模型里的状态流转逻辑
- 它会划分「限界上下文」——比如订单上下文和库存上下文,明确两个上下文之间的交互规则
- 会定义「聚合根」——比如订单作为聚合根,关联订单明细、优惠券使用记录这些相关对象,确保业务规则的一致性
DDD的目标是让代码和业务逻辑完全对齐,避免出现“代码写出来但不符合业务实际规则”的情况,尤其适合业务复杂的系统。
核心区别对比
- 聚焦点不同
- HLD:盯的是系统整体结构和技术架构,是宏观层面的规划,解决“系统怎么搭架子”的问题
- DDD:盯的是业务领域的核心逻辑和细节,是微观业务层面的落地,解决“业务逻辑怎么正确转化为代码”的问题
- 适用场景不同
- HLD:所有系统都需要,是设计的第一步,不管业务简单还是复杂
- DDD:更适合业务逻辑复杂、规则多的系统(比如金融交易、电商中台),简单CRUD系统用DDD反而没必要
- 产出物不同
- HLD:产出架构图、模块划分文档、技术选型方案这类宏观设计文档
- DDD:产出领域模型图、限界上下文划分、聚合根定义,最终落地到代码里的业务逻辑层实现
- 设计顺序关系
- 一般是先做HLD确定系统的大模块,再在每个模块内部用DDD设计核心业务逻辑。比如HLD确定了订单模块,DDD就负责把订单模块里的状态流转、优惠计算这些业务细节打磨清楚
内容的提问来源于stack exchange,提问作者Vishal Raj
相关产品推荐
相关产品推荐

