DDD(Domain-Driven Design,领域驱动设计)是由 Eric Evans 在其经典著作中提出的一种软件开发方法论。它强调以业务领域为核心,通过深入理解业务复杂性来构建高质量、可维护的软件系统,尤其适用于企业级应用和微服务架构。
在DDD的经典四层模型中,实际工程落地中最常用的是清晰的三层架构:应用层、领域层和基础层。
┌─────────────┐
│ 应用层 │
├─────────────┤
│ 领域层 │
├─────────────┤
│ 基础层 │
└─────────────┘
应用层:业务流程的协调者
应用层位于领域层之上,其核心职责是协调用例(Use Case)的执行,组织领域对象完成具体的业务流程。

应用层本身不包含具体的业务规则,而是专注于事务控制、权限校验、调用领域服务以及与外部接口的编排。通过将流程控制逻辑与核心领域规则分离,应用层使得复杂的业务流程更易于调整和维护,同时确保了领域模型的纯粹与清晰。
领域层:业务核心的承载者
领域层是DDD的心脏,承载了最核心的业务模型与业务规则。

它由实体(Entity)、值对象(Value Object)、聚合(Aggregate)、领域服务(Domain Service)及领域事件(Domain Event) 等关键构件组成。领域层的主要职责是精准地表达业务概念、维护业务数据的一致性并执行业务规则。
一个设计良好的领域层应尽可能保持技术上的纯粹性,不依赖具体的技术实现细节,这有助于保障模型的可测试性,并支持业务在长期演进过程中的灵活调整。
基础层:技术实现的支撑者
基础层(或称基础设施层)为整个系统提供通用的技术能力支持。

这包括数据持久化(如ORM框架、仓储接口的具体实现)、消息中间件、外部服务集成、日志记录与系统监控等。基础层为上层(应用层和领域层)提供必要的“技术养分”,但其实现细节应通过接口或抽象的形式向上暴露,严格避免具体的技术实现侵入到核心的领域模型中,这正是依赖倒置原则(DIP)的体现。
通过这样清晰的分层,DDD有效地实现了关注点分离,使得业务逻辑、流程协调与技术实现各司其职,极大地提升了复杂软件系统的可维护性、可测试性与演进能力。
|