阿里開(kāi)源COLA 4.0 - 項(xiàng)目實(shí)踐

COLA分層架構(gòu)

COLA 4.0 架構(gòu)分成COLA架構(gòu)和COLA組件兩個(gè)部分:

  1. COLA架構(gòu):關(guān)注應(yīng)用架構(gòu)的定義和構(gòu)建辞色,提升應(yīng)用質(zhì)量新蟆。
  2. COLA組件:提供應(yīng)用開(kāi)發(fā)所需要的可復(fù)用組件,提升研發(fā)效率锅知。
COLA 4.0 框架

COLA架構(gòu):關(guān)注應(yīng)用架構(gòu)的定義和構(gòu)建妇拯,提升應(yīng)用質(zhì)量幻馁。領(lǐng)域模型對(duì)設(shè)計(jì)能力要求很高洗鸵,沒(méi)把握用好,一個(gè)錯(cuò)誤的抽象還不如不抽象仗嗦,寧可不要用膘滨,也不要濫用,不要為了DDD而DDD稀拐。*

COLA架構(gòu)各個(gè)包結(jié)構(gòu)的簡(jiǎn)要功能描述火邓,如下表所示:

層次 包名 功能 必選
Adapter層 web 處理頁(yè)面請(qǐng)求的Controller
Adapter層 wireless 處理無(wú)線端的適配
Adapter層 wap 處理wap端的適配
App層 executor 處理request,包括command和query
App層 consumer 處理外部message
App層 scheduler 處理定時(shí)任務(wù)
Domain層 model 領(lǐng)域模型
Domain層 ability 領(lǐng)域能力德撬,包括DomainService
Domain層 gateway 領(lǐng)域網(wǎng)關(guān)铲咨,解耦利器
Infra層 gatewayimpl 網(wǎng)關(guān)實(shí)現(xiàn)
Infra層 mapper ibatis數(shù)據(jù)庫(kù)映射
Infra層 config 配置信息
Client SDK api 服務(wù)對(duì)外透出的API
Client SDK dto 服務(wù)對(duì)外的DTO

COLA 組件:提供了一些框架級(jí)別的功能,提供應(yīng)用開(kāi)發(fā)所需要的可復(fù)用組件蜓洪,提升研發(fā)效率纤勒。

組件名稱 功能 版本 依賴
cola-component-dto 定義了DTO格式,包括分頁(yè) 1.0.0 無(wú)
cola-component-exception 定義了異常格式蝠咆,主要有BizException和SysException 1.0.0 無(wú)
cola-component-statemachine 狀態(tài)機(jī)組件 1.0.0 無(wú)
cola-component-domain-starter Spring托管的領(lǐng)域?qū)嶓w組件 1.0.0 無(wú)
cola-component-catchlog-starter 異常處理和日志組件 1.0.0 exception,dto組件
cola-component-extension-starter 擴(kuò)展點(diǎn)組件 1.0.0 無(wú)
cola-component-test-container 測(cè)試容器組件 1.0.0 無(wú)

參考:《 COLA 4.0:應(yīng)用架構(gòu)的最佳實(shí)踐

COLA框架職責(zé)劃分

COLA框架主要分為適配層踊东、應(yīng)用層、Client模塊刚操、領(lǐng)域?qū)诱⒊帷⒒A(chǔ)設(shè)施層

分層架構(gòu)如下:


COLA 4.0 分層架構(gòu)

分包結(jié)構(gòu)如下:


COLA 4.0 包結(jié)構(gòu)模型

1)適配層(Adapter Layer):負(fù)責(zé)對(duì)前端展示(web,wireless菊霜,wap)的路由和適配坚冀,對(duì)于傳統(tǒng)B/S系統(tǒng)而言,adapter就相當(dāng)于MVC中的controller鉴逞;


適配層代碼結(jié)構(gòu)

2)應(yīng)用層(Application Layer):主要負(fù)責(zé)獲取輸入记某,組裝上下文,參數(shù)校驗(yàn)构捡,調(diào)用領(lǐng)域?qū)幼鰳I(yè)務(wù)處理液南,如果需要的話,發(fā)送消息通知等勾徽。層次是開(kāi)放的滑凉,應(yīng)用層也可以繞過(guò)領(lǐng)域?qū)樱苯釉L問(wèn)基礎(chǔ)實(shí)施層喘帚;


應(yīng)用層代碼結(jié)構(gòu)

3)Client模塊(Client Module):包含的代碼應(yīng)該是常見(jiàn)的服務(wù)接口Facade和DTO數(shù)據(jù)傳輸對(duì)象畅姊,如API、DTO吹由、領(lǐng)域事件若未、Command和Query對(duì)象等等。


Client模塊

4)領(lǐng)域?qū)樱―omain Layer):主要是封裝了核心業(yè)務(wù)邏輯倾鲫,并通過(guò)領(lǐng)域服務(wù)(Domain Service)和領(lǐng)域?qū)ο螅―omain Entity)的方法對(duì)App層提供業(yè)務(wù)實(shí)體和業(yè)務(wù)邏輯計(jì)算粗合。領(lǐng)域是應(yīng)用的核心萍嬉,不依賴任何其他層次;


領(lǐng)域?qū)影Y(jié)構(gòu)

5)基礎(chǔ)實(shí)施層(Infrastructure Layer):主要負(fù)責(zé)技術(shù)細(xì)節(jié)問(wèn)題的處理舌劳,比如數(shù)據(jù)庫(kù)的CRUD帚湘、搜索引擎玫荣、文件系統(tǒng)甚淡、分布式服務(wù)的RPC等。此外捅厂,領(lǐng)域防腐的重任也落在這里贯卦,外部依賴需要通過(guò)gateway的轉(zhuǎn)義處理,才能被上面的App層和Domain層使用焙贷。


基礎(chǔ)實(shí)施層

6)啟動(dòng)模塊(Start Module):Spring Boot的啟動(dòng)類撵割,應(yīng)用入口。沒(méi)有任何邏輯辙芍,只需要配置 application.properties 配置文件啡彬。


啟動(dòng)模塊

CQRS架構(gòu)模式

CQRS架構(gòu)模式,在DDD中是一種很常見(jiàn)的模式故硅,它的用途在于將Command與Query功能進(jìn)行分離庶灿,讓一些復(fù)雜的查詢擺脫領(lǐng)域模型的限制,以更為簡(jiǎn)單的DTO形式展現(xiàn)查詢結(jié)果吃衅。服務(wù)可以獨(dú)立部署往踢,也可以拆分部署。數(shù)據(jù)庫(kù)可以使用一個(gè)徘层,也可以讀寫(xiě)分離峻呕。

CQRS架構(gòu)

在COLA 4.0中,已經(jīng)移除了Command Bus和Query Bus的處理趣效,進(jìn)一步簡(jiǎn)化了COLA架構(gòu)瘦癌。

業(yè)務(wù)調(diào)用時(shí)序圖

我們通過(guò)分三個(gè)場(chǎng)景的UML時(shí)序圖描述一下各模塊之間的調(diào)用關(guān)系。主要差異在于應(yīng)用層中的Command或Query執(zhí)行器的處理過(guò)程跷敬。

場(chǎng)景一:Command或Query執(zhí)行器直接調(diào)用Gateway接口讯私,處理業(yè)務(wù)請(qǐng)求。


UML時(shí)序圖:場(chǎng)景一

場(chǎng)景二:Command或Query執(zhí)行器干花,調(diào)用領(lǐng)域服務(wù)(Domain Service)妄帘,然后領(lǐng)域服務(wù)調(diào)用Gateway完成業(yè)務(wù)請(qǐng)求。


UML時(shí)序圖:場(chǎng)景二

場(chǎng)景三:Command或Query執(zhí)行器直接調(diào)用infrastructure層中定義的Mapper池凄,完成業(yè)務(wù)邏輯處理抡驼。


UML時(shí)序圖:場(chǎng)景三

下面說(shuō)明整體調(diào)用過(guò)程和注意事項(xiàng)。

  1. Adapter接收Cmd/Qry對(duì)象或者參數(shù)列表(Request Param)肿仑。如果請(qǐng)求參數(shù)是參數(shù)列表致盟,則構(gòu)造Cmd/Qry對(duì)象碎税,然后調(diào)用App Service接口。

  2. App服務(wù)接收Cmd/Qry對(duì)象馏锡,然后調(diào)用Cmd/Qry Executor(執(zhí)行器)雷蹂,如上圖所示,分為以下三種場(chǎng)景:
    2.1. Command Executor 可以通過(guò)領(lǐng)域?qū)嶓w方法杯道,以及Gateway接口匪煌,實(shí)現(xiàn)簡(jiǎn)單業(yè)務(wù)編排,完成業(yè)務(wù)請(qǐng)求党巾。
    2.2. 或者通過(guò)調(diào)用領(lǐng)域服務(wù)(Domain Service)實(shí)現(xiàn)復(fù)雜業(yè)務(wù)邏輯處理萎庭,然后在領(lǐng)域服務(wù)通過(guò)Gateway訪問(wèn)數(shù)據(jù)的持久化。
    2.3. 或者直接跳過(guò)Domain層齿拂,在Qry Executor中調(diào)用infrastructure中的Mapper接口驳规,訪問(wèn)數(shù)據(jù)庫(kù)持久化操作。

  3. App服務(wù)署海、Command Executor(命令執(zhí)行器)以及Domain Serivce都是無(wú)狀態(tài)服務(wù)吗购,本身不存儲(chǔ)任務(wù)信息。

  4. App服務(wù)負(fù)責(zé)實(shí)現(xiàn)對(duì)外暴露的API服務(wù)砸狞,然后調(diào)用Command Executor.

  5. Domain Service 負(fù)責(zé)封裝一個(gè)領(lǐng)域中跨實(shí)體操作的業(yè)務(wù)邏輯捻勉。App Service 負(fù)責(zé)封裝跨領(lǐng)域?qū)嶓w操作的業(yè)務(wù)邏輯。

  6. Gateway接口用來(lái)隔離技術(shù)實(shí)現(xiàn)細(xì)節(jié)趾代,GatewayImpl實(shí)現(xiàn)領(lǐng)域?qū)佣x的Gate接口贯底,負(fù)責(zé)數(shù)據(jù)的CRUD操作,數(shù)據(jù)庫(kù)測(cè)可以是MySQL撒强、NoSql禽捆、Elasticsearch、Redis飘哨、甚至Hadoop/HBase等

分層架構(gòu)胚想、包結(jié)構(gòu)、業(yè)務(wù)調(diào)用關(guān)系

下圖將COLA分層架構(gòu)芽隆、包結(jié)構(gòu)浊服、業(yè)務(wù)調(diào)用關(guān)系,整合在一張圖中胚吁。

COLA分層架構(gòu)牙躺、包結(jié)構(gòu)、以及業(yè)務(wù)調(diào)用關(guān)系圖

代碼參考:《COLA 4.x架構(gòu)入門(mén)和項(xiàng)目實(shí)踐

更多推薦

DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))從入門(mén)到精通

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腕扶,一起剝皮案震驚了整個(gè)濱河市孽拷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌半抱,老刑警劉巖脓恕,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膜宋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡炼幔,警方通過(guò)查閱死者的電腦和手機(jī)秋茫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乃秀,“玉大人肛著,你說(shuō)我怎么就攤上這事』沸危” “怎么了策泣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵衙傀,是天一觀的道長(zhǎng)抬吟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)统抬,這世上最難降的妖魔是什么火本? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮聪建,結(jié)果婚禮上钙畔,老公的妹妹穿的比我還像新娘。我一直安慰自己金麸,他們只是感情好擎析,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著挥下,像睡著了一般揍魂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棚瘟,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天现斋,我揣著相機(jī)與錄音,去河邊找鬼偎蘸。 笑死庄蹋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迷雪。 我是一名探鬼主播限书,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼章咧!你這毒婦竟也來(lái)了倦西?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤慧邮,失蹤者是張志新(化名)和其女友劉穎调限,沒(méi)想到半個(gè)月后舟陆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耻矮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年秦躯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裆装。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡踱承,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哨免,到底是詐尸還是另有隱情茎活,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布琢唾,位于F島的核電站载荔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏采桃。R本人自食惡果不足惜懒熙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望普办。 院中可真熱鬧工扎,春花似錦、人聲如沸衔蹲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舆驶。三九已至橱健,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贞远,已是汗流浹背畴博。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蓝仲,地道東北人俱病。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像袱结,于是被迫代替她去往敵國(guó)和親亮隙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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