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. 团队协作:统一规范,约定大于配置

七、常用规范

  • 包名全小写

  • 避免循环依赖

  • 单一职责原则

  • 控制层保持简洁

  • 服务层处理业务逻辑

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

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

相关推荐
Hx_Ma1613 小时前
Map集合的5种遍历方式
java·前端·javascript
小手cool13 小时前
Java 列表中查找最小值和最大值最有效率的方法
java
惊讶的猫14 小时前
多线程同步问题及解决
java·开发语言·jvm
wfsm14 小时前
工厂模式创建动态代理实现类
java·开发语言
好好研究14 小时前
总结SSM设置欢迎页的方式
xml·java·后端·mvc
Hui Baby14 小时前
java -jar 启动原理
java·pycharm·jar
weixin_5112552114 小时前
更新jar内资源和代码
java·jar
木井巳14 小时前
【递归算法】验证二叉搜索树
java·算法·leetcode·深度优先·剪枝
不当菜虚困14 小时前
windows下HSDB导出class文件报错【java.io.IOException : 系统找不到指定的路径。】
java·开发语言
小马爱打代码14 小时前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端