创建好基础项目之后,我们就可以来准备目录结构了,我根据我工作中的经验,把目录结构分为下图所示:
这边do文件夹不知道为什么识别不出来,后面我换成了tableentity文件夹。
下面我按顺序讲解下每一个目录的作用:
java目录下
- api:这个目录可以放本项目调用其他服务的api接口,比如FeignClient、mq这些。
- config:这里放整个项目的配置类或者配置映射类,如果项目配置很多,可以再细分。
- constant:这里放整个项目的常量类。按照开发规范,代码里不应该出现突如其来的魔法值,不便于阅读。另一个作用是,可以把常量分门别类做个汇总,一定程度上也可以防止重复。例如:业务报错话术、一些字符串常量、一些状态码code等等。
- enum:枚举。例如:报错信息的code和message、“状态”之类的业务字段等等。只要是值是有限个的,其实都可以定义为枚举。
- controller:MVC中的C,控制层。
- openapi:有时候项目需要提供一些接口给上游系统调用,又不想把所有的接口都提供出去,或者是对于上下游交互的接口需要做一些特殊的处理逻辑,比如参数校验等,此时可以在这个openapi目录下再写一层controller,如果接口逻辑一模一样,可以直接调用父层级目录下的对应controller接口即可。
- entity:专门放各种实体类的目录。这一层分的比较详细,大家可以参考删减bo、dto、vo之类的,毕竟简单的项目如果要定义这么多实体其实还是挺麻烦的。
- annotation:自定义注解。
- bo:业务对象。具有一定的业务含义,实体类中可以含有一定的业务逻辑。
- do:数据对象。对应的是数据库表实体。
- dto:数据传输对象。纯用来作为数据传输,没有业务含义。
- req:请求对象。如果是openapi,建议也单独用一个req对象,命名可以以OpenApiReq。
- resp:响应对象。
- vo:视图对象。用来作为页面展示的数据渲染,里面可以包含一些UI界面所需格式的转换。比如时间、小数等。
- job:项目中的定时任务代码可以放在这里。
- repository:仓储层。mybatis的mapper.java文件放在这里,也可以放一些操作redis、mongodb的。
- service:项目中的业务逻辑都写在这里。
- impl:实现类。通过接口的实现,可以方便做扩展。
- util:工具类。
resources目录下
- mapper:mybatis的mapper.xml文件。
- static:项目静态资源。
- css:css文件。
- js:js文件。
- template:模板文件。比如thymeleaf等模板文件。
所有的配置文件就放在resources目录下即可。
注意:项目目录结构并非一成不变,也不一定要分的很仔细,如果自己公司的项目代码量很少,那么简洁的目录结构,能够使得项目代码清晰明了即可,没必要过度细化。把握好一个度,才是最适合的。