工程规范
這幾天在寫一個(gè)內(nèi)部的小需求,需求很簡(jiǎn)單。但是在搭建工程的時(shí)候遇到了不少問題,本來一天半能搞定所有的東西上線,但是不符合公司上線的規(guī)范要求重構(gòu)。特此記錄一下
項(xiàng)目結(jié)構(gòu)
大部分項(xiàng)目應(yīng)該使用CRUD模式,只有在絕對(duì)必要的時(shí)候使用更為負(fù)載CQRS模式。
Java服務(wù)的結(jié)構(gòu)如下(假設(shè)項(xiàng)目名為demo):
- demo-api: HTTP 服務(wù)入口 (包括dubbo服務(wù),controller等)
- demo-common: 公用代碼 (包括enmus,exception,utils等等)
- demo-contract: RPC服務(wù)接口(原生java不應(yīng)該依賴任何東西,比如rpc服務(wù)接口,自定義的HttpRequest實(shí)體類等)
- demo-core: command操作/應(yīng)該僅用于CQPS模式
- demo-domain: 領(lǐng)域?qū)ο?/li>
- demo-integration: 外部HTTP接口訪問層
- demo-logic: 業(yè)務(wù)邏輯層/用于CRUD模式
- demo-manager: 通用業(yè)務(wù)邏輯層(新增)
- demo-mq: 消息隊(duì)列接入層
- demo-repository: 數(shù)據(jù)庫(kù)訪問層/DAO層
- demo-query: 在線業(yè)務(wù)邏輯層/應(yīng)該僅用于CQRS 模式
- demo-service: RPC 服務(wù)入口
- demo-task: 離線任務(wù)
- demo-tool: 工具
- docs: 文檔
- 其他: 項(xiàng)目特有的其他目錄
應(yīng)用分層
以CRUD模式為例子
?
?
- Open API層:可直接封裝 Service 接口暴露成 RPC 接口 ; 通過 Web 封裝成 http 接口 ; 網(wǎng)關(guān)控制層等。
- API層:主要是對(duì)訪問控制進(jìn)行轉(zhuǎn)發(fā),各類基本參數(shù)校驗(yàn),或者不復(fù)用的業(yè)務(wù)簡(jiǎn)單處理等。
- Service層: RPC接口層
- Logic層:相對(duì)具體的業(yè)務(wù)邏輯服務(wù)層。
- Manager層:通用業(yè)務(wù)處理層,它有如下特征:
- 對(duì)第三方平臺(tái)封裝的層,預(yù)處理返回結(jié)果及轉(zhuǎn)化異常信息 ;
- ?對(duì) Logic 層通用能力的下沉,如緩存方案、中間件通用處理 ;
- ?與 DAO 層交互,對(duì) DAO 的業(yè)務(wù)通用能力的封裝。
- DO(Data Object): 與數(shù)據(jù)庫(kù)表結(jié)構(gòu)一一對(duì)應(yīng),通過 DAO 層向上傳輸數(shù)據(jù)源對(duì)象。
- DTO(Data Transfer Object): 數(shù)據(jù)傳輸對(duì)象, Logic 和 Manager 向外傳輸?shù)膶?duì)象。
- BO(Business Object): 業(yè)務(wù)對(duì)象。可以由 Logic 層輸出的封裝業(yè)務(wù)邏輯的對(duì)象。
- QUERY: 數(shù)據(jù)查詢對(duì)象,各層接收上層的查詢請(qǐng)求。注:超過 2 個(gè)參數(shù)的查詢封裝,禁止使用 Map 類來傳輸。
- VO(View Object): 顯示層對(duì)象,通常是 Web 向前端渲染傳輸?shù)膶?duì)象。
?
轉(zhuǎn)載于:https://www.cnblogs.com/WegYcx/p/8033415.html
總結(jié)
- 上一篇: @responseBody 返回更多数据
- 下一篇: java学习之单例模式(饿汉式与懒汉式)