一. 背景介紹
當前,我們使用 Spring Boot + Mybatis + Maven 技術棧,按照微服務設計的要求(小而自治)開發 Java 應用,不推薦和使用 Module 實現項目分層。
二. 規範意義
規範 Java 項目的目錄結構是 Java 工程化的基礎,也是打通 DevOps 流程的起點。合理的目錄結構能減輕設計負擔,提升項目的模塊化程度與可維護性,促進團隊協作,降低溝通成本,確保研發、測試、編譯、部署和交付等環節的標準化與一致性。實際制定時,應結合技術棧、項目管理工具以及組織內部習慣(習慣取代配置)來制定合理的目錄結構。這一規範將直接影響開發體驗、維護效率、標準化實施和交付質量。
三. 思考與設計點
3.1 數據實體目錄規劃與使用建議
數據實體在項目中承擔載體和傳輸的作用,是項目重要組成部分
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 結尾。
四. 推薦項目結構及命名規範
src/main/java
└── com
└── example
|── config
│ │── enums
│ │── properties
│ │── kafka
│ │── redis
│ │── retrofit
│ └── Constants.java
├── model
│ │── dto
│ │ ├── in
│ │ │ └── UserDTOIn.java
│ │ │── out
│ │ │ └── UserDTOOut.java
│ ├── bo
│ │ └── UserBO.java
│ ├── po
│ │ ├── db
│ │ │ ├── {dbname}
│ │ │ │ ├── generator
│ │ │ │ │ └── UserPO.java
│ │ │ │ ├── custom
│ │ │ │ │ └── User{XXX}PO.java
│ │ ├── http
│ │ ├── redis
│ │ ├── kafka
│ ├── converter
│ │ ├── dto
│ │ │ ├── in
│ │ │ │ └── UserDTOInConverter.java
│ │ │ │── out
│ │ │ │ └── UserDTOOutConverter.java
│ │ ├── bo
│ │ │ └── UserBOConverter.java
│ │ │── po
│ │ │ └── UserPOConverter.java
├── controller
├── service
│ ├── bussinessA
│ ├── bussinessB
├── dao
│ ├── mapper
│ │ ├── {dbname}
│ │ │ ├── generator
│ │ │ │ └── UserMapper.java
│ │ │ ├── custom
│ │ │ │ └── UserCustomMapper.java
│ ├── http
│ ├── redis
│ ├── kafka
├── util
│ └── ListUtil.java
└── Application.java
└── resources
│ ├── mapper
│ │ ├── {dbname}
│ │ │ ├── generator
│ │ │ │ └── UserMapper.xml
│ │ │ ├── custom
│ │ │ │ └── UserCustomMapper.xml
│ │── application.yml
│ │── application-{env}.yml
└── test