實(shí)戰(zhàn)篇-項(xiàng)目架構(gòu),原則和分層

# 項(xiàng)目原則
- 堅(jiān)持最小依賴,默認(rèn)最佳實(shí)踐,支持自定義,以實(shí)用為主;
- 項(xiàng)目以DDD架構(gòu)為原型,提供開箱即用的功能。

# 技術(shù)選型
Java17+SpringBoot2.6+MyBatis|JPA+Hutool+Docker

# 項(xiàng)目分層
> 基礎(chǔ)架構(gòu)層 infrastructure
分為核心庫和組件庫,核心庫是必須的,組件庫根據(jù)需要選用,沒有強(qiáng)制依賴。

infrastructure-core?
-依賴javax系列,hutool系列,orika和slf4j,主要提供無依賴的基礎(chǔ)類庫,包括領(lǐng)域基類,轉(zhuǎn)換類,異常類,幫助類,uuid生成器,供其他各層使用。
infrastructure-spring
-依賴spring各種starer,提供cache,json,jwt,redis等各種擴(kuò)展和配置。
infrastructure-mybatis
依賴mybatis-mapper和mybatis,提供mybatis的基類,以及Mybatis擴(kuò)展,包括對(duì)枚舉類型的處理,對(duì)JPA的支持。
infrastructure-excel
-依賴easyExcel,提供對(duì)easyExcel的封裝,方便導(dǎo)入和導(dǎo)出。

> 領(lǐng)域?qū)?flower-domain
核心業(yè)務(wù)邏輯,建議使用富領(lǐng)域模型,僅依賴infrastructure-core。

領(lǐng)域倉儲(chǔ)層 flower-repository
領(lǐng)域存儲(chǔ)接口,僅僅是接口,具體實(shí)現(xiàn)根據(jù)技術(shù)選型決定,僅依賴domain層,實(shí)踐中一般合并到領(lǐng)域?qū)印?/p>

領(lǐng)域倉儲(chǔ)有兩個(gè)實(shí)現(xiàn)層,分別是:
flower-repository-mybatis
-通過mybatis實(shí)現(xiàn)數(shù)據(jù)庫操作,Mapper通過繼承MybatisMapper可以實(shí)現(xiàn)常用增上改查操作,我們只需要寫復(fù)雜查詢及特殊操作即可
flower-repository-jpa
-通過jpa實(shí)現(xiàn)數(shù)據(jù)獲取和保存,對(duì)jpa使用沒有任何限制。

> 應(yīng)用層 flower-application
應(yīng)用層,融合領(lǐng)域?qū)雍皖I(lǐng)域倉儲(chǔ)層,常用套路:準(zhǔn)備數(shù)據(jù)(通過領(lǐng)域倉儲(chǔ)或外部服務(wù)獲取數(shù)據(jù)) -> 執(zhí)行操作(對(duì)象創(chuàng)建,賦值,領(lǐng)域處理,純內(nèi)存操作) -> 持久化(保存到倉儲(chǔ)或發(fā)消息),依賴領(lǐng)域?qū)雍皖I(lǐng)域倉儲(chǔ)接口層。

技術(shù)規(guī)范
- 應(yīng)用層應(yīng)該永遠(yuǎn)返回Output(輸入為Input),而不是Entity;
- 應(yīng)用層不負(fù)責(zé)處理異常,遇到錯(cuò)誤直接拋出異常是最合理的;
- 應(yīng)用層只使用一個(gè)入?yún)?,入?yún)⑹俏ㄒ坏念愋?,不服用的類型?/p>

> 接口層 flower-webapi
接口層主要對(duì)網(wǎng)絡(luò)協(xié)議的轉(zhuǎn)換,統(tǒng)一鑒權(quán),限流配置,異常處理
-? 對(duì)接口參數(shù)進(jìn)行轉(zhuǎn)換和驗(yàn)證,通過JSR303,<實(shí)戰(zhàn)篇-基礎(chǔ)設(shè)施,基類與配置>中有詳細(xì)說明;
-? 對(duì)接口輸入和輸出格式化,通過json格式,<實(shí)戰(zhàn)篇-接口實(shí)現(xiàn),配置和部署>中有詳細(xì)說明;
-? 統(tǒng)一鑒權(quán),獲取當(dāng)前用戶,以便傳遞給下游服務(wù);
-? 異常處理,接口層做統(tǒng)一異常捕獲,避免將異常直接暴露給調(diào)用端,并轉(zhuǎn)化為調(diào)用端可以理解的數(shù)據(jù)格式;
-? 配置組件參數(shù)和環(huán)境變量;
-? 配置具體領(lǐng)域倉儲(chǔ)實(shí)現(xiàn)。

技術(shù)規(guī)范
- 接口層返回值為ActionResult;
- 接口層捕獲所有異常;
- 接口層負(fù)責(zé)處理所有參數(shù)校驗(yàn);


SpringBoot入門系列

實(shí)戰(zhàn)篇-項(xiàng)目架構(gòu),原則和分層
實(shí)戰(zhàn)篇-基礎(chǔ)設(shè)施,基類與配置
實(shí)戰(zhàn)篇-接口實(shí)現(xiàn),配置和部署
實(shí)戰(zhàn)篇-倉儲(chǔ)技術(shù)選型
實(shí)戰(zhàn)篇-工具類實(shí)戰(zhàn)

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

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