-
圖中默認(rèn)上層依賴于下層,箭頭關(guān)系表示可直接依賴,如:開(kāi)放接口層可以依賴于Web 層夏漱,也可以直接依賴于 Service 層呈昔,依此類(lèi)推:
? 開(kāi)放接口層:可直接封裝 Service 方法暴露成 RPC 接口;通過(guò) Web 封裝成 http 接口蝶念;進(jìn)行網(wǎng)關(guān)安 全控制抛腕、流量控制等。
? 終端顯示層:各個(gè)端的模板渲染并執(zhí)行顯示的層媒殉。當(dāng)前主要是 velocity 渲染担敌,JS 渲染,JSP 渲染廷蓉,移動(dòng)端展示等全封。
? Web 層:主要是對(duì)訪問(wèn)控制進(jìn)行轉(zhuǎn)發(fā),各類(lèi)基本參數(shù)校驗(yàn)桃犬,或者不復(fù)用的業(yè)務(wù)簡(jiǎn)單處理等刹悴。 ? Service 層:相對(duì)具體的業(yè)務(wù)邏輯服務(wù)層。
? Manager 層:通用業(yè)務(wù)處理層攒暇,它有如下特征:
1) 對(duì)第三方平臺(tái)封裝的層土匀,預(yù)處理返回結(jié)果及轉(zhuǎn)化異常信息。
2) 對(duì) Service 層通用能力的下沉形用,如緩存方案就轧、中間件通用處理。
3) 與 DAO 層交互田度,對(duì)多個(gè) DAO 的組合復(fù)用钓丰。
? DAO 層:數(shù)據(jù)訪問(wèn)層,與底層 MySQL每币、Oracle携丁、Hbase 等進(jìn)行數(shù)據(jù)交互。
? 外部接口或第三方平臺(tái):包括其它部門(mén) RPC 開(kāi)放接口,基礎(chǔ)平臺(tái)梦鉴,其它公司的 HTTP 接口李茫。
2.(分層異常處理規(guī)約)在 DAO 層,產(chǎn)生的異常類(lèi)型有很多肥橙,無(wú)法用細(xì)粒度的異常進(jìn)行 catch魄宏,使用 catch(Exception e)方式,并 throw new DAOException(e)存筏,不需要打印日志宠互,因?yàn)槿罩驹?Manager/Service 層一定需要捕獲并打印到日志文件中去,如果同臺(tái)服務(wù)器再打日志椭坚,浪費(fèi)性能和存儲(chǔ)予跌。在 Service 層出現(xiàn)異常時(shí),必須記錄出錯(cuò)日志到磁盤(pán)善茎,盡可能帶上參數(shù)信息券册,相當(dāng)于保護(hù)案發(fā)現(xiàn)場(chǎng)。如果 Manager 層與 Service 同機(jī)部署垂涯,日志方式與 DAO 層處理一致烁焙,如果是單獨(dú)部署,則采用與 Service 一致的處理方式耕赘。Web 層絕不應(yīng)該繼續(xù)往上拋異常骄蝇,因?yàn)橐呀?jīng)處于頂層,如果意識(shí)到這個(gè)異常將導(dǎo)致頁(yè)面無(wú)法正常渲染操骡,那么就應(yīng)該直接跳轉(zhuǎn)到友好錯(cuò)誤頁(yè)面乞榨,加上用戶容易理解的錯(cuò)誤提示信息。開(kāi)放接口層要將異常處理成錯(cuò)誤碼和錯(cuò)誤信息方式返回当娱。
- 分層領(lǐng)域模型規(guī)約:
? DO(Data Object):此對(duì)象與數(shù)據(jù)庫(kù)表結(jié)構(gòu)一一對(duì)應(yīng)吃既,通過(guò) DAO 層向上傳輸數(shù)據(jù)源對(duì)象。
? DTO(Data Transfer Object):數(shù)據(jù)傳輸對(duì)象跨细,Service 或 Manager 向外傳輸?shù)膶?duì)象鹦倚。
? BO(Business Object):業(yè)務(wù)對(duì)象,由 Service 層輸出的封裝業(yè)務(wù)邏輯的對(duì)象冀惭。
? AO(Application Object):應(yīng)用對(duì)象震叙,在 Web 層與 Service 層之間抽象的復(fù)用對(duì)象模型,極為貼近展示層散休,復(fù)用度不高媒楼。
? VO(View Object):顯示層對(duì)象,通常是 Web 向模板渲染引擎層傳輸?shù)膶?duì)象戚丸。
? Query:數(shù)據(jù)查詢對(duì)象划址,各層接收上層的查詢請(qǐng)求扔嵌。注意超過(guò) 2 個(gè)參數(shù)的查詢封裝,禁止使用 Map 類(lèi)來(lái)傳輸夺颤。