cd ..
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...