目录结构
章节简介
本章节介绍项目目录接口,各种文件存放,编写规范等。
项目结构
以下以点线图形式展示项目结构,请在开发过程中遵守此结构,大家保持一致,便于后期维护。
项目目录/
│ ├── main/
│ │ ├── docker/
│ │ │ └── Dockerfile ->Dockerfile文件,一般无需修改
│ │ ├── java/
│ │ │ ├── com/
│ │ │ ├── fykj/
│ │ │ ├── scaffold/
│ │ │ ├── 业务模块A/ ->业务模块文件夹,应该按照项目需求分业务模块,每个模块都有如下文件
│ │ │ │ ├── cons/ ->常量类存放位置
│ │ │ │ ├── controller/ ->Controller类存放位置
│ │ │ │ │ ├── api/ ->api包存放的是对外开放的接口,无需认证也可访问
│ │ │ │ ├── domain/ ->所有实体类、DTO、VO、Entity
│ │ │ │ │ ├── dto/ ->DTO类存放位置
│ │ │ │ │ ├── entity/ ->Entity类存放位置
│ │ │ │ │ ├── params/ ->参数类存放位置
│ │ │ │ │ ├── vo/ ->VO类存放位置
│ │ │ │ ├── mapper/ ->Mybatis Mapper接口存放位置
│ │ │ │ ├── service/ ->service接口存放位置
│ │ │ │ │ ├── impl/ ->service实现类存放位置
│ │ │ │ ├── task/ ->定时任务相关类存放位置,不是必须
│ │ │ │ ├── util/ ->工具类存放位置,不是必须
│ │ │ ├── config/ ->配置类存放
│ │ │ ├── oss/ ->本地OSS、Minio实现、以及未来扩展
│ │ │ ├── security/ ->基于SaToken的登录、退出相关实现
│ │ │ ├── sms/ ->短信服务,SmsFacade门面类
│ │ │ ├── system/ ->系统核心业务相关,如用户、角色、权限等
│ │ │ ├── website/ ->内置网站管理
│ │ │ └── ScaffoldApplication.java ->主程序入口
│ │ ├── resources/
│ │ ├── data/ ->各种模板存放位置,可以新建docTemplate、pdfTemplate等文件夹,用于存放模板文件
│ │ │ ├── excelTemplate/ ->Excel导出模板存放
│ │ ├── mapper/ ->Mybatis Mapper文件存放位置,可以新建文件夹分类管理
│ │ │ ├── database/ ->代码生成器用的相关SQL
│ │ │ │ └── MySQLGeneratorMapper.xml
│ │ │ ├── system/ ->系统管理相关Mapper
│ │ │ ├── website/ ->网站管理相关Mapper
│ │ ├── template/ ->代码生成器用的相关模板
│ │ ├── application-dev.yml ->开发环境配置文件
│ │ ├── application-prod.yml ->生产环境配置文件
│ │ ├── application-test.yml ->测试环境配置文件
│ │ ├── application.yml ->通用配置文件
│ │ ├── generation.properties ->代码生成器配置文件
│ │ ├── knife4j.yml ->knife4j配置文件
│ │ └── logback-boot.xml ->日志配置文件
├── build.gradle ->gradle配置文件
├── setting.gradle ->gradle配置文件
模块规约
在项目开发过程中,应该按照业务模块进行划分,模块应新建在项目/main/java/com/fykj/scaffold/{模块名}下。以业务模块英文命名,例如:survey/activity/mall代表 调查问卷、活动管理、商城等模块。
在每个模块中,都应该包含以下文件夹controller/domain/mapper/service,代码生成器生成时也会自动创建这些文件夹,并将相应的文件放入其中
实体类规约
提示
这些类主要用于封装数据格式,不应该包含任何业务逻辑,只保留getter和setter方法,以及构造方法
如果有需要,可以在DTO或者VO中增加内部类
核心区别
| 类型 | 作用层 | 与数据库关系 | 典型用途 |
|---|---|---|---|
| Entity | 数据持久化层 | 直接映射 | 数据库 CRUD 操作 |
| DTO | 服务层/控制层 | 无关 | 服务层数据传输 |
| VO | 服务层/控制层 | 无关 | 前端展示/API 响应 |
| Params | 服务层/控制层 | 无关 | 接收查询参数 |
- VO:视图对象,主要用于封装前端页面展示需要的数据,此类应尽量做到前端需要什么,就返回什么,不要有任何多余字段。
- DTO:数据传输对象,主要用于封装前端传递给后端的数据或者是后端Service层质量传递的数据
- Entity:实体对象,主要用于数据库表ORM映射,包括Mybatis 的
@TableName、@TableField注解,此类只能包含数据库表字段,不允许新建任何其他字段。如果需要返回给前端,尽量使用VO封装。 - Params:参数对象,主要用于封装前端传递给后端查询条件的参数
常量规约
- 常量类应该根据业务用途,新建在自身业务模块的cons目录下,如
项目/main/java/com/fykj/scaffold/{模块名}/cons,常量命名规则为:{模块名}Cons.java。例如:SystemCons.java - 在常量类中,应在类上加注@UtilityClass注解,防止开发人员初始化此类
- 在常量类内部,应该按照具体用途,细分内部类
/**
* 系统常量类
*/
@UtilityClass
public class SystemCons {
/**
* 配置类型
*/
public static class ConfigType {
public static final String STRING = "String";
public static final String INTEGER = "Integer";
public static final String BOOLEAN = "Boolean";
public static final String DECIMAL = "Decimal";
}
/**
* 组织架构
*/
public static class Org {
public static final String CDO = "CDO";
}
}
配置文件
后续如果需要新增配置文件,应该放在项目/main/resources下
