應(yīng)用分層及領(lǐng)域模型解讀

領(lǐng)域分層

    1. 【推薦】圖中默認(rèn)上層依賴于下層,箭頭關(guān)系表示可直接依賴,如:開(kāi)放接口層可以依賴于
      Web 層,也可以直接依賴于 Service 層,依此類推:


      image.png

      [圖片上傳中...(image.png-2a138f-1632469032140-0)]

? 開(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ā)婉宰,各類基本參數(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):包括其它部門 RPC 開(kāi)放接口鲫凶,基礎(chǔ)平臺(tái),其它公司的 HTTP 接口衩辟。

領(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)傳輸。

詳解

  • 查詢視圖


    image.png

前端或者其它服務(wù)將 Param 對(duì)象作為參數(shù)傳給控制層或者對(duì)外服務(wù)接口荆烈,然后調(diào)用內(nèi)部的服務(wù)類拯勉,服務(wù)類內(nèi)部的中間數(shù)據(jù)和這些數(shù)據(jù)相關(guān)的邏輯可以封裝為 BO ,比如根據(jù) BO 多個(gè)屬性判斷是否符合某個(gè)條件憔购。
如果查詢數(shù)據(jù)則封裝為 Query 對(duì)象作為參數(shù)宫峦,如果需要查詢其它依賴,則可以封裝 Param 對(duì)象作為參數(shù)去查詢玫鸟。DAO 層一般插入和更新的參數(shù)對(duì)象使用 DO 或 Param, 查詢參數(shù)一般使用 Query导绷,刪除參數(shù)一般使用 Param。

  • 返回視圖


    image.png

數(shù)據(jù)訪問(wèn)層通常將數(shù)據(jù)封裝為 DO 對(duì)象傳給 Service 層屎飘,Manager 或 Client 層往往將查詢結(jié)果封裝為 DTO 傳給 Service 層诵次。
通常內(nèi)部服務(wù)層通過(guò) DTO 往外傳輸數(shù)據(jù)。Controller 通常將 DTO 組裝為前端需要的 VO 或者直接將 DTO 外傳 枚碗。
RPC 服務(wù)接口將 DTO 直接返回或者重新封裝為新的 DTO 返回給外部服務(wù)逾一。
另外即使同一個(gè)接口,但是一個(gè)對(duì)內(nèi)使用肮雨,一個(gè)對(duì)外暴露遵堵,盡量使用不同接口,定義不同的參數(shù)和返回值,從而避免因?yàn)樾薷膬?nèi)部或外部的數(shù)據(jù)結(jié)構(gòu)而導(dǎo)致另外一個(gè)受到影響陌宿,這也是單一職責(zé)原則的要求锡足。
單一職責(zé)原則:一個(gè)類應(yīng)該有且只有一個(gè)改變的理由。
也有部分團(tuán)隊(duì) RPC 的請(qǐng)求和響應(yīng)參數(shù)都通過(guò) DTO 來(lái)承載壳坪,通過(guò) XXRequestDTO 和 XXResponseDTO 來(lái)表示舶得。
實(shí)踐分層領(lǐng)域模型能夠提高項(xiàng)目的健壯性、可拓展性和可維護(hù)性爽蝴,降低了系統(tǒng)內(nèi)部各層的耦合度沐批。


參考資料:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蝎亚,隨后出現(xiàn)的幾起案子九孩,更是在濱河造成了極大的恐慌,老刑警劉巖发框,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躺彬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梅惯,警方通過(guò)查閱死者的電腦和手機(jī)宪拥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)铣减,“玉大人江解,你說(shuō)我怎么就攤上這事♂慵撸” “怎么了犁河?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)魄梯。 經(jīng)常有香客問(wèn)我桨螺,道長(zhǎng),這世上最難降的妖魔是什么酿秸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任灭翔,我火速辦了婚禮,結(jié)果婚禮上辣苏,老公的妹妹穿的比我還像新娘肝箱。我一直安慰自己,他們只是感情好稀蟋,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布煌张。 她就那樣靜靜地躺著,像睡著了一般退客。 火紅的嫁衣襯著肌膚如雪骏融。 梳的紋絲不亂的頭發(fā)上链嘀,一...
    開(kāi)封第一講書(shū)人閱讀 49,850評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音档玻,去河邊找鬼怀泊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛误趴,可吹牛的內(nèi)容都是我干的霹琼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼凉当,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼枣申!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起纤怒,我...
    開(kāi)封第一講書(shū)人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎天通,沒(méi)想到半個(gè)月后泊窘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡像寒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年烘豹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诺祸。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡携悯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筷笨,到底是詐尸還是另有隱情憔鬼,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布胃夏,位于F島的核電站轴或,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仰禀。R本人自食惡果不足惜照雁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望答恶。 院中可真熱鬧饺蚊,春花似錦、人聲如沸悬嗓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)包竹。三九已至曙求,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悟狱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工静浴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挤渐。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓苹享,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親浴麻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子得问,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容