基础项目结构
约 1006 字大约 3 分钟
springboot
2025-05-15
写在前面
所谓项目结构 并没有一定之规, 只是一种约定, 不同的项目有不同的项目结构, 但是有一些基本的原则, 比如:
- 项目结构应该清晰, 易于维护
- 项目结构应该易于扩展
- 项目结构应该易于理解
- 项目结构应该易于测试
本文所列出的项目结构, 式相对而言一种约定俗成的结构
顶层结构
项目根目录/src/main/java
:放置项目Java源代码项目根目录/src/main/resources
:放置项目静态资源和配置文件项目根目录/src/test/java
:放置项目测试用例代码
源代码目录
位于/src/main/java目录
下的Java源代码的组织结构大家比较关心,这地方也只能给出一个通常典型的结构,毕竟不同项目和团队实践不一样,稍许有区别,但整体安排应该差不多。而且如果是多模块的项目的话,下面的结构应该只对应其中一个模块,其他模块的代码组织也大致差不多。
|_com.example
|_annotation:放置项目自定义注解
|_aspect:放置切面代码
|_config:放置配置类
|_constant:放置常量、枚举等定义
|_consist:存放常量定义
|_enums:存放枚举定义
|_controller:放置控制器代码
|_exception:自定义异常类
|_filter:放置一些过滤、拦截相关的代码
|_mapper:放置数据访问层代码接口
|_model:放置数据模型代码
|_entity:放置数据库实体对象定义
|_dto:存放数据传输对象定义
|_vo:存放显示层对象定义
|_service:放置具体的业务逻辑代码(接口和实现分离)
|_intf:存放业务逻辑接口定义
|_impl:存放业务逻辑实际实现
|_utils:放置工具类和辅助代码
这地方估计有一个很多人都会纠结的关于 DTO/VO/DO等数据模型定义
的区分。
这在《阿里巴巴Java开发手册》中倒是做了一个所谓的严格区分,那本书上是这样去定义的:
DO(Data Object)
:与数据库表结构一一对应,通过DAO层向上传输数据源对象。DTO(Data Transfer Object)
:数据传输对象,Service或Manager向外传输的对象。BO(Business Object)
:业务对象。由Service层输出的封装业务逻辑的对象。AO(Application Object)
:应用对象。在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。VO(View Object)
:显示层对象,通常是Web向模板渲染引擎层传输的对象。Query
:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。
实际项目开发时, 没有必要
刻意照搬去定义这么多层对象,这样后续做对象转换工作都能烦skr人。
出于简单起见, 只要 保证业务逻辑层Service和数据库DAO层的操作对象
严格划分出来,确保互相不渗透,不混用,问题应该就不大。
比如在我上面举例的这个项目的代码结构中,Service层处理的对象都定义在了dto包里,而DAO层处理的对象都放在了entity包里了。
资源目录
/src/main/resources目录
,里面主要存放静态配置文件和页面静态资源等东西:
|_mapper:存放mybatis的XML映射文件(如果是mybatis项目)
|_static:存放网页静态资源,比如下面的js/css/img
|__js:
|__css:
|__img:
|__font:
|__等等
|_template:存放网页模板,比如thymeleaf/freemarker模板等
|__header
|__sidebar
|__bottom
|__XXX.html等等
|_application.yml 基本配置文件
|_application-dev.yml 开发环境配置文件
|_application-test.yml 测试环境配置文件
|_application-prod.yml 生产环境配置文件