2025-12-045 min39 views
DDD项目架构解析
#Rest Api#Mybatis#Spring Security#Domain Driven Design#Java
以下是一个典型的DDD分层项目结构实例(Java项目):
com.novacloudedu.backend/
│
├── interfaces/ # 接口层(用户接口层)
│ └── rest/ # REST API
│ ├── auth/ # 认证模块
│ │ ├── AuthController.java
│ │ ├── dto/
│ │ │ ├── request/ # 请求 DTO (UserLoginRequest, UserRegisterRequest)
│ │ │ └── response/ # 响应 DTO (LoginUserResponse)
│ │ └── assembler/ # DTO 组装器 (UserAssembler)
│ └── common/ # 通用接口 (HealthController)
│
├── application/ # 应用层
│ └── user/ # 用户模块
│ ├── UserApplicationService.java # 应用服务(编排用例流程)
│ └── command/ # 命令对象
│ ├── RegisterUserCommand.java
│ └── LoginUserCommand.java
│
├── domain/ # 领域层(核心业务逻辑)
│ └── user/ # 用户领域
│ ├── entity/
│ │ └── User.java # 聚合根(充血模型)
│ ├── valueobject/ # 值对象
│ │ ├── UserId.java
│ │ ├── UserAccount.java
│ │ ├── Password.java
│ │ └── UserRole.java
│ └── repository/
│ └── UserRepository.java # 仓储接口
│
├── infrastructure/ # 基础设施层
│ ├── persistence/ # 持久化
│ │ ├── po/ # 持久化对象 (UserPO)
│ │ ├── mapper/ # MyBatis Mapper (UserMapper)
│ │ ├── repository/ # 仓储实现 (UserRepositoryImpl)
│ │ └── converter/ # PO↔Entity 转换器 (UserConverter)
│ └── security/ # 安全相关
│ ├── JwtTokenProvider.java
│ ├── JwtAuthenticationFilter.java
│ ├── JwtAuthenticationEntryPoint.java
│ ├── JwtAccessDeniedHandler.java
│ └── PasswordEncoderAdapter.java
│
├── common/ # 通用类
│ ├── BaseResponse.java # 统一响应封装
│ ├── ErrorCode.java # 错误码枚举
│ └── ResultUtils.java # 响应工具类
│
├── config/ # 配置类
│ ├── SecurityConfig.java # Spring Security 配置
│ └── OpenApiConfig.java # Swagger 配置
│
├── exception/ # 异常处理
│ ├── BusinessException.java # 业务异常
│ ├── ThrowUtils.java # 抛异常工具
│ └── GlobalExceptionHandler.java # 全局异常处理器
│
├── aop/ # AOP 切面
│ └── AuthInterceptor.java # 权限校验切面
│
├── annotation/ # 自定义注解
│ └── AuthCheck.java # 权限校验注解
│
└── BackendApplication.java # 启动类
resources/
├── application.yml # 主配置
├── application-dev.yml # 开发环境配置
└── application-prod.yml # 生产环境配置
关键目录说明
1. 应用层(application)
- services:应用服务,负责用例流程协调(无业务逻辑)
- dtos(query / command):数据传输对象,用于接口层与外部系统的数据交换
- events:应用层事件(如触发邮件通知)
2. 领域层
- aggregates: 聚合根(业务一致性边界,如
OrderAggregate) - entities/values: 实体(唯一标识)和值对象(不可变属性)
- services: 领域服务(处理跨聚合的业务逻辑)
- repositories: 仓储接口(定义持久化契约,实现由基础设施层提供)
3. 基础设施层
- repositories: 仓储实现(如JPA/Hibernate、MyBatis)
- external: 外部服务适配器(如调用第三方支付API的Client)
- persistence: 数据库实体(与领域模型分离,避免污染领域层)
4. 用户界面层
- rest: REST API的Controller(接收HTTP请求,调用应用服务)
特点总结
- 领域与技术解耦:领域层不依赖具体技术实现(如数据库、框架)
- 高内聚低耦合:按聚合划分业务边界,避免代码臃肿
- 明确分层职责
- 接口层:处理输入输出(HTTP/MQ等)
- 应用层:编排领域对象
- 领域层:实现核心业务规则
- 基础设施层:提供技术实现(数据库、外部服务)
根据项目规模,可灵活调整结构(例如小项目可合并application层和interfaces层)。
/** Comments(0)*/
Loading comments...