Java項(xiàng)目目錄結(jié)構(gòu)推薦

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

參考文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.從傳統(tǒng)三層架構(gòu)與DDD分層架構(gòu)的編程演變其實(shí)是思想的演變。 傳統(tǒng)三層架構(gòu),即用戶界面層UI、業(yè)務(wù)邏輯層BAL、...
    咖啡電視閱讀 8,613評論 0 6
  • Java分層概念(轉(zhuǎn)) 原文地址(也不屬于原文吧,這也是別人轉(zhuǎn)載的不知道原作者是誰,如有侵權(quán),請聯(lián)系,以刪除):h...
    小小世界R閱讀 1,727評論 0 0
  • 一、生命周期 一個事物一旦出生,就必然會長大,變異,一旦長大,就面臨著衰老,接下來就是消亡了,這個過程就稱為一個事...
    ZyBlog閱讀 2,849評論 1 11
  • 1.概念 PO(persistant object) 持久對象在 O/R 映射的時候出現(xiàn)的概念,如果沒有 O/R ...
    胖先森閱讀 5,564評論 1 20
  • 一個項(xiàng)目中說系統(tǒng)分為表現(xiàn)層、控制層、邏輯層、DAO層和最終數(shù)據(jù)庫五層架構(gòu) 表現(xiàn)層就是看到的東西,比如你現(xiàn)在看到的當(dāng)...
    ZZS_簡閱讀 1,409評論 0 1

友情鏈接更多精彩內(nèi)容