DDD(Domain-Driven Design)领域驱动设计
DDD是一种软件开发方法论,强调将复杂的业务领域模型化。它将应用程序分为几个主要部分:用户界面层、应用层、领域层和基础设施层。在Java开发中,DDD常用于构建复杂的企业级应用。
-
用户界面层(User Interface Layer):负责向用户展示信息并解释用户命令。在Java中,这可能是基于Spring MVC的控制器,或者是RESTful API接口。
-
应用层(Application Layer):定义软件要完成的任务,并且协调领域对象来解决问题。它不包含业务逻辑,主要是协调和委派。在Java中,这通常是一组应用服务(Application Services)。
-
领域层(Domain Layer):表示业务概念、业务状态信息和业务规则。这是DDD的核心,包含实体(Entity)、值对象(Value Object)、聚合(Aggregate)和领域服务(Domain Service)等。在Java中,这些通常是普通的Java类,但它们封装了复杂的业务逻辑。
-
基础设施层(Infrastructure Layer):为其他层提供通用的技术能力,如持久化机制、消息传递、网络通信等。在Java中,这可能包括ORM框架的实现、消息队列的集成、缓存的实现等。
层级 | 包名/类名 | 类名/对象 | 解释 | 对应三层架构 |
---|---|---|---|---|
用户界面层 | interfaces.web | XxxController | REST控制器,处理HTTP请求 | 表示层 |
interfaces.facade | XxxFacade | 对外暴露的服务接口 | 表示层 | |
interfaces.dto | XxxDTO | 数据传输对象,用于接口层数据交换 | 表示层 | |
interfaces.assembler | XxxAssembler | DTO和领域对象之间的转换器 | 表示层 | |
应用层 | application | XxxApplicationService | 应用服务,编排领域对象,实现用例 | 业务逻辑层 |
application.command | XxxCommand | 命令对象,表示一个具体的操作请求 | 业务逻辑层 | |
application.query | XxxQuery | 查询对象,用于封装查询条件 | 业务逻辑层 | |
领域层 | domain.model | XxxAggregate | 聚合根,确保业务不变性 | 业务逻辑层 |
domain.model | XxxEntity | 领域实体,具有唯一标识 | 业务逻辑层 | |
domain.model | XxxValueObject | 值对象,无唯一标识 | 业务逻辑层 | |
domain.service | XxxDomainService | 领域服务,处理跨实体的业务逻辑 | 业务逻辑层 | |
domain.repository | XxxRepository | 仓储接口,定义持久化操作 | 数据访问层 | |
基础设施层 | infrastructure.persistence | XxxRepositoryImpl | 仓储接口实现,实现数据持久化 | 数据访问层 |
infrastructure.message | XxxMessageProducer | 消息生产者,发送领域事件 | - | |
infrastructure.message | XxxMessageConsumer | 消息消费者,处理领域事件 | - | |
infrastructure.rpc | XxxRpcClient | RPC客户端,调用外部服务 | - | |
infrastructure.config | XxxConfig | 配置类,如数据源、消息队列等配置 | - | |
infrastructure.adapter.rest | XxxRestAdapter | REST API适配器 | 表示层 | |
infrastructure.adapter.mq | XxxMqAdapter | 消息队列适配器 | - | |
infrastructure.adapter.cache | XxxCacheAdapter | 缓存适配器 | - | |
共享内核 | shared.event | XxxDomainEvent | 领域事件,表示领域中发生的重要事情 | - |
shared.exception | XxxException | 自定义异常类 | - | |
启动类 | com.example | Application | Spring Boot启动类 | - |