# 八股-DDD ## 面试题 - DDD的分层架构是怎么样的? - 什么是充血模型和贫血模型? - 什么是实体,什么是值对象? - 什么是聚合,什么是聚合根? - 什么是领域事件? - 如何理解领域驱动设计? - 请详细描述DDD的实现流程? |问题|关键词/关键概念| |---|---| |DDD的分层架构是怎么样的?|**用户接口层**(Controller/API)→**应用层**(Application Service编排/协调)→**领域层**(Entity/Value Object/Domain Service核心业务)→**基础设施层**(Repository/DB/MQ技术实现)、依赖倒置、领域层不依赖其他层| |什么是充血模型和贫血模型?|**贫血模型**:实体只有属性getter/setter、业务逻辑在Service、面向过程、违反OOP<br>**充血模型**:实体包含业务行为、自包含业务逻辑、面向对象、高内聚| |什么是实体,什么是值对象?|**实体Entity**:有唯一标识ID、生命周期、可变状态、如User/Order<br>**值对象Value Object**:无标识、不可变、通过属性判等、可替换、如Money/Address| |什么是聚合,什么是聚合根?|**聚合Aggregate**:一组相关对象的集合、事务一致性边界、整体概念单元<br>**聚合根Aggregate Root**:聚合的唯一入口、对外暴露接口、维护聚合内一致性、如Order是OrderItem的聚合根| |什么是领域事件?|**Domain Event**:领域中发生的业务事件、过去时命名如OrderPlaced、事件驱动、解耦聚合、最终一致性、事件溯源、包含时间戳和相关数据| |如何理解领域驱动设计?|**核心思想**:业务复杂度驱动、统一语言(Ubiquitous Language)、界限上下文(Bounded Context)、战略设计+战术设计、业务专家协作、模型驱动、持续演进| |请详细描述DDD的实现流程?|**战略设计**:1.事件风暴识别领域事件 2.划分界限上下文 3.上下文映射关系<br>**战术设计**:4.识别聚合和实体 5.定义值对象 6.设计领域服务 7.定义仓储接口<br>**实现落地**:8.分层架构搭建 9.编写领域模型 10.实现应用服务 11.基础设施实现 12.持续重构优化| ## DDD核心概念详解 ### **分层架构职责** - **用户接口层**:REST API、Web页面、DTO转换、参数校验 - **应用层**:用例编排、事务管理、权限控制、调用领域服务 - **领域层**:核心业务规则、领域模型、业务不变量、领域服务 - **基础设施层**:数据持久化、消息队列、缓存、第三方服务集成 ### **战略设计要素** - **界限上下文**:明确边界、独立部署、数据隔离、团队自治 - **上下文映射**:共享内核、客户供应商、防腐层、开放主机服务 - **统一语言**:业务术语一致、代码体现业务、减少翻译成本 ### **战术设计模式** - **工厂模式**:复杂对象创建 - **仓储模式**:持久化抽象 - **规约模式**:业务规则封装 - **领域服务**:跨聚合业务逻辑 ### **实施要点** - **事件风暴**:与业务专家协作、发现领域事件、识别聚合边界 - **增量迭代**:小步快跑、持续重构、演进式设计 - **测试驱动**:单元测试保护领域逻辑、集成测试验证用例 ### **常见误区** - 过度设计、所有项目都用DDD - 忽视业务复杂度、技术驱动而非业务驱动 - 贫血模型假DDD、只用战术模式忽视战略设计 - 聚合边界过大、事务范围不当