java 項(xiàng)目結(jié)構(gòu)
最近難得賦閑,閱讀公司內(nèi)部和開源的比較優(yōu)秀的項(xiàng)目,對于其中的package命名感觸頗深,遂成此文,即為總結(jié),也為備忘;
兩種常見目錄結(jié)構(gòu)
標(biāo)準(zhǔn)規(guī)范的命名,對于閱讀和溝通都能起到很正面的促進(jìn)作用。目前比較常見的目錄接口分為兩類:一類MVC模式的目錄接口(簡單項(xiàng)目推薦),另一類是DDD領(lǐng)域設(shè)計(jì)模式(大型項(xiàng)目推薦);
MVC模式
概述
MVC, 模型(Model)、視圖(View)和控制器(Controller); 傳統(tǒng)的三層架構(gòu),面向過程的javaWeb分層模式,主要分為如下以下三個層次:
1. 數(shù)據(jù)訪問層; 即包含數(shù)據(jù)庫在內(nèi)的所有數(shù)據(jù)源的操作部分
2. 業(yè)務(wù)邏輯層; 對業(yè)務(wù)數(shù)據(jù)進(jìn)行邏輯處理部分
3. 表現(xiàn)層; 與用戶交互的部分類似
常見結(jié)構(gòu)
- controller : 主要是對外的接口
- service : 核心業(yè)務(wù)邏輯
- dao/mapper : 數(shù)據(jù)庫訪問層
- entity: 實(shí)體類,字段和數(shù)據(jù)庫保持一致
- vo: 前端專用類型,避免暴露數(shù)據(jù)庫結(jié)構(gòu)
- common: 基礎(chǔ)工具包和常量package
DDD領(lǐng)域設(shè)計(jì)模式
- domain/entity: 領(lǐng)域?qū)嶓w類,和數(shù)據(jù)庫字段保持一致
- domain/value: 領(lǐng)域值對象,持有自己的業(yè)務(wù)屬性和行為
- domain/event: 領(lǐng)域事件,領(lǐng)域中產(chǎn)生的一些消息事件,異步提升性能和解掉耦合依賴
- domain/factory: 領(lǐng)域?qū)ο蠊S,復(fù)雜的領(lǐng)域?qū)嶓w類/值對象工廠類
- domain/repository: 持久化操作類
- domain/service: 領(lǐng)域核心邏輯
- Infrastructure: 基礎(chǔ)設(shè)施,Infrastructure負(fù)責(zé)給三層架構(gòu)提供支持,平臺和框架相關(guān)的實(shí)現(xiàn)層
- common: 基礎(chǔ)工具
- controller: 對外接口
關(guān)鍵詞縮寫
- biz 業(yè)務(wù)邏輯,核心的業(yè)務(wù)邏輯
- dao 數(shù)據(jù)庫操作,僅只是負(fù)責(zé)數(shù)據(jù)庫操作
- vo 視圖對象,前端交互專用
- dto 數(shù)據(jù)傳輸對象
- domain: 領(lǐng)域模型,幾乎包括了所有的業(yè)務(wù)邏輯
- PO: Persistant Object,持久化對象
- DO:Domain Object,領(lǐng)域?qū)ο?/li>
- VO: View Object,視圖對象。Controller在返回DTO給視圖時,可能還需要包括狀態(tài)信息—例如操作成功/失敗的狀態(tài)嗎、提示文本等—這時就需要在DTO外面再包一層,即View Object
個人實(shí)踐
- 以x項(xiàng)目為例,分為兩個包,x-start提供接口和和對外交互,x-service核心邏輯; 如果項(xiàng)目十分復(fù)雜,可以在x-servvice分拆多個獨(dú)立的領(lǐng)域包
x-service
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── tech
│ │ │ └── x
│ │ │ ├── common
│ │ │ ├── config
│ │ │ ├── domain
│ │ │ │ ├── event
│ │ │ │ ├── factory
│ │ │ │ ├── model
│ │ │ │ ├── repository
│ │ │ │ └── service
│ │ │ └── infrastructure
│ │ │ ├── entity
│ │ │ ├── exception
│ │ │ ├── repository
│ │ │ └── util
│ │ └── resources
│ └── test
│ └── java
x-start
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── tech
│ │ │ └── x
│ │ │ ├── controller
│ │ │ ├── dto
│ │ │ └── everyday
│ │ │ ├── queue
│ │ │ │ └── delayqueue
│ │ │ ├── reflect
│ │ │ ├── sync
│ │ │ └── vertx
│ │ │ ├── model
│ │ │ └── rest
│ │ └── resources
│ │ ├── static
│ │ │ ├── assets
│ │ │ ├── css
│ │ │ └── js
│ │ └── templates
參考文檔
- 領(lǐng)域驅(qū)動設(shè)計(jì)實(shí)踐 https://www.cnblogs.com/daoqidelv/p/7648392.html
- 項(xiàng)目架構(gòu)之傳統(tǒng)三層架構(gòu)和領(lǐng)域模型三層架構(gòu):https://my.oschina.net/mzdbxqh/blog/865046