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

七、常用规范

  • 包名全小写

  • 避免循环依赖

  • 单一职责原则

  • 控制层保持简洁

  • 服务层处理业务逻辑

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

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

相关推荐
涡能增压发动积1 天前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Wenweno0o1 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨1 天前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg3213211 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung1 天前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald1 天前
SpringBoot - 自动配置原理
java·spring boot·后端
@yanyu6661 天前
07-引入element布局及spring boot完善后端
javascript·vue.js·spring boot
殷紫川1 天前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月1 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得