找回密码
 立即注册
首页 业界区 业界 Java REST API 三层架构项目目录规划与使用建议 ...

Java REST API 三层架构项目目录规划与使用建议

能杜孱 2025-9-22 21:34:37
一. 背景介绍

当前,我们使用 Spring Boot + Mybatis + Maven 技术栈,按照微服务设计的要求(小而自治)开发 Java 应用,不推荐和使用 Module 实现项目分层。
二. 规范意义

规范 Java 项目的目录结构是 Java 工程化的基础,也是打通 DevOps 流程的起点。合理的目录结构能减轻设计负担,提升项目的模块化程度与可维护性,促进团队协作,降低沟通成本,确保研发、测试、编译、部署和交付等环节的标准化与一致性。实际制定时,应结合技术栈、项目管理工具以及组织内部习惯(习惯取代配置)来制定合理的目录结构。这一规范将直接影响开发体验、维护效率、标准化实施和交付质量。
三. 思考与设计点

3.1 数据实体目录规划与使用建议

数据实体在项目中承担载体和传输的作用,是项目重要组成部分,其目录规范与使用建议可参考:Java 三层架构项目中数据实体目录规划与使用建议。
3.2 controller、service 和 dao 子包该如何划分?

相比业务需求的多样性,数据源相对较为单一和固定,建议 dao 中子包按数据源划分,controller、service 子包或业务类可以考虑按业务划分,以适应业务多样性。
3.3 自动和人工生成的同类实体类如何存放?

自动生成的代码不应被人为改动,否则后续可能存在不一致的问题。建议将自动生成和人为创建的同类代码分别保存在不同的目录,目录名分别为:generator 和 custom。例如,mybatis-generator 生成的 PO 实体,建议保存在 po.db.{dbname}.generator 目录下;人为创建的与该 db 相关的 PO,保存在 po.db.{dbname}.custom 目录下,mapper.xml 和 Mapper 类同理。
3.4 配置与工具类如何存放?

(1)配置类,建议按数据源或数据类型,统一存放在 config 包(目录)下,如 enums、properties(项目配置信息)、kafka、redis、retrofit 等,常量类 Constants 建议也保存在该包下。
(2)工具类,建议存放在 util 包下,类名以 Util 结尾。
四. 推荐项目结构及命名规范
  1. src/main/java
  2. └── com
  3.     └── example
  4.         |── config
  5.         │   │── enums
  6.         │   │── properties
  7.         │   │── kafka
  8.         │   │── redis
  9.         │   │── retrofit
  10.         │   └── Constants.java
  11.         ├── model
  12.         │   │── dto
  13.         │   │   ├── in
  14.         │   │   │   └── UserDTOIn.java
  15.         │   │   │── out
  16.         │   │   │   └── UserDTOOut.java
  17.         │   ├── bo
  18.         │   │   └── UserBO.java
  19.         │   ├── po
  20.         │   │   ├── db
  21.         │   │   │   ├── {dbname}
  22.         │   │   │   │   ├── generator
  23.         │   │   │   │   │   └── UserPO.java
  24.         │   │   │   │   ├── custom
  25.         │   │   │   │   │   └── User{XXX}PO.java
  26.         │   │   ├── http
  27.         │   │   ├── redis
  28.         │   │   ├── kafka
  29.         │   ├── converter
  30.         │   │   ├── dto
  31.         │   │   │   ├── in
  32.         │   │   │   │   └── UserDTOInConverter.java        
  33.         │   │   │   │── out
  34.         │   │   │   │   └── UserDTOOutConverter.java        
  35.         │   │   ├── bo
  36.         │   │   │   └── UserBOConverter.java
  37.         │   │   │── po
  38.         │   │   │   └── UserPOConverter.java
  39.         ├── controller
  40.         ├── service
  41.         │   ├── bussinessA
  42.         │   ├── bussinessB
  43.         ├── dao
  44.         │   ├── mapper
  45.         │   │   ├── {dbname}
  46.         │   │   │   ├── generator
  47.         │   │   │   │   └── UserMapper.java
  48.         │   │   │   ├── custom
  49.         │   │   │   │   └── UserCustomMapper.java
  50.         │   ├── http
  51.         │   ├── redis
  52.         │   ├── kafka        
  53.         ├── util
  54.         │   └── ListUtil.java
  55.         └── Application.java
  56. └── resources
  57. │   ├── mapper
  58. │   │   ├── {dbname}
  59. │   │   │   ├── generator
  60. │   │   │   │   └── UserMapper.xml
  61. │   │   │   ├── custom
  62. │   │   │   │   └── UserCustomMapper.xml
  63. │   │── application.yml
  64. │   │── application-{env}.yml
  65. └── test
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

前天 17:52

举报

懂技术并乐意极积无私分享的人越来越少。珍惜
您需要登录后才可以回帖 登录 | 立即注册