springboot项目包结构

Spring Boot项目的包结构有多种组织方式,主要取决于项目规模和团队规范。以下是几种常见的包结构组织方式:

一、按功能模块划分(垂直分层)

这是最经典的分层架构,适合中小型项目:

复制代码
com.example.project
├── config/           # 配置类
│   ├── WebConfig.java
│   ├── SecurityConfig.java
│   └── DatabaseConfig.java
├── controller/       # 控制层
│   ├── UserController.java
│   └── ProductController.java
├── service/          # 服务层
│   ├── UserService.java
│   ├── impl/
│   │   ├── UserServiceImpl.java
│   │   └── ProductServiceImpl.java
│   └── ProductService.java
├── repository/       # 数据访问层
│   ├── UserRepository.java
│   └── ProductRepository.java
├── model/            # 实体类
│   ├── entity/       # 数据库实体
│   │   ├── User.java
│   │   └── Product.java
│   ├── dto/          # 数据传输对象
│   │   ├── UserDTO.java
│   │   └── ProductDTO.java
│   └── vo/           # 视图对象
│       ├── UserVO.java
│       └── ProductVO.java
├── exception/        # 异常处理
│   ├── GlobalExceptionHandler.java
│   └── BusinessException.java
└── utils/            # 工具类
    ├── DateUtils.java
    └── StringUtils.java

二、按业务模块划分(水平切分)

适合中大型项目,模块化程度高:

复制代码
com.example.project
├── common/           # 公共模块
│   ├── config/
│   ├── exception/
│   ├── utils/
│   └── constant/
├── user/             # 用户模块
│   ├── controller/
│   ├── service/
│   ├── repository/
│   ├── model/
│   │   ├── entity/
│   │   ├── dto/
│   │   └── vo/
│   └── UserApplication.java
├── product/          # 产品模块
│   ├── controller/
│   ├── service/
│   ├── repository/
│   ├── model/
│   └── ProductApplication.java
├── order/            # 订单模块
│   ├── controller/
│   ├── service/
│   ├── repository/
│   ├── model/
│   └── OrderApplication.java
└── ProjectApplication.java

三、简单项目结构

适合快速原型、小型项目:

复制代码
com.example.project
├── controller/
│   ├── UserController.java
│   └── ProductController.java
├── service/
│   ├── UserService.java
│   └── ProductService.java
├── repository/
│   ├── UserRepository.java
│   └── ProductRepository.java
├── entity/           # 合并实体类
│   ├── User.java
│   └── Product.java
├── dto/              # 简化数据传输对象
│   └── UserDTO.java
└── Application.java

四、DDD领域驱动设计结构

适合复杂业务系统:

复制代码
com.example.project
├── infrastructure/   # 基础设施层
│   ├── persistence/  # 持久化
│   ├── client/       # 外部服务调用
│   └── config/
├── application/      # 应用层
│   ├── service/
│   ├── dto/
│   └── event/
├── domain/           # 领域层
│   ├── model/        # 领域模型
│   │   ├── user/
│   │   └── order/
│   ├── service/      # 领域服务
│   ├── repository/   # 仓储接口
│   └── event/        # 领域事件
├── interfaces/       # 接口层
│   ├── web/          # Web接口
│   ├── rpc/          # RPC接口
│   └── mq/           # 消息接口
└── Application.java

五、推荐的最佳实践

1. 混合结构(推荐)

复制代码
com.example.project
├── common/
│   ├── config/      # 公共配置
│   ├── exception/   # 异常处理
│   ├── constant/    # 常量
│   ├── enums/       # 枚举
│   ├── util/        # 工具类
│   └── response/    # 统一响应
├── modules/
│   ├── user/        # 用户模块
│   │   ├── controller/
│   │   ├── service/
│   │   ├── dao/     # 或repository
│   │   ├── entity/
│   │   ├── dto/
│   │   ├── vo/
│   │   └── mapper/  # MyBatis Mapper
│   └── product/     # 产品模块
└── Application.java

2. 目录结构示例

复制代码
// 示例代码结构
src/main/java/com/example/
├── Application.java
├── config/
│   ├── SwaggerConfig.java
│   ├── SecurityConfig.java
│   └── RedisConfig.java
├── common/
│   ├── BaseEntity.java
│   ├── Result.java
│   └── PageResult.java
├── modules/
│   ├── user/
│   │   ├── UserController.java
│   │   ├── UserService.java
│   │   ├── UserServiceImpl.java
│   │   ├── UserRepository.java
│   │   ├── User.java
│   │   ├── UserDTO.java
│   │   └── UserVO.java
│   └── order/
│       ├── OrderController.java
│       └── ...
└── utils/
    ├── DateUtil.java
    └── JsonUtil.java

六、选择建议

  1. 简单项目:使用功能模块划分,结构清晰

  2. 中型项目:使用混合结构,按业务模块划分

  3. 大型项目:使用DDD或微服务架构,每个模块独立

  4. 团队协作:统一规范,约定大于配置

七、常用规范

  • 包名全小写

  • 避免循环依赖

  • 单一职责原则

  • 控制层保持简洁

  • 服务层处理业务逻辑

  • 数据访问层只做数据操作

选择哪种结构取决于项目规模、团队习惯和业务复杂度。对于大多数项目,推荐使用混合结构,既保持灵活性又具有扩展性。

相关推荐
贺今宵8 小时前
安装java环境,安装jdk,jre,配环境win11
java·开发语言
qq_4783775158 小时前
python cut_merge video, convert video2gif, cut gif
java·前端·python
爱学习的小可爱卢8 小时前
JavaEE进阶——SpringBoot日志从入门到精通
java·spring boot·后端
利刃大大8 小时前
【JavaSE】十九、JVM运行流程 && 类加载Class Loading
java·开发语言·jvm
testresultstomorrow8 小时前
GB26875消防物联网协议Java实现详解
java·物联网
Clarence Liu8 小时前
Go Context 深度解析:从源码到 RESTful 框架的最佳实践
开发语言·后端·golang
heartbeat..8 小时前
Java Map 详解:原理、实现与使用场景
java·map·集合
踏浪无痕8 小时前
Nacos到底是AP还是CP?一文说清楚
分布式·后端·面试
踏浪无痕8 小时前
深入JRaft:Nacos配置中心的性能优化实践
分布式·后端·面试