利用Spring Cloud實(shí)現(xiàn)微服務(wù)(三)- 業(yè)務(wù)領(lǐng)域驅(qū)動(dòng)微服務(wù)設(shè)計(jì)

虛擬一家類(lèi)似于XX打車(chē)的創(chuàng)業(yè)公司春寿,要開(kāi)展業(yè)務(wù),首先要開(kāi)發(fā)一套網(wǎng)上叫車(chē)的系統(tǒng)忽孽。使用DDD的思想進(jìn)行設(shè)計(jì)堂淡,并用SpringCloud框架進(jìn)行開(kāi)發(fā)。本節(jié)主要講如何通過(guò)業(yè)務(wù)領(lǐng)域驅(qū)動(dòng)微服務(wù)的設(shè)計(jì)

公司名稱(chēng):打車(chē)易公司

公司愿景:讓天下沒(méi)有難打的車(chē)

一扒腕、業(yè)務(wù)領(lǐng)域

1. 業(yè)務(wù)子域

通過(guò)與公司核心團(tuán)隊(duì)一番交談绢淀,我們了解到了主要需求是:客戶(hù)在網(wǎng)上叫車(chē),系統(tǒng)自動(dòng)分配離客戶(hù)最近的車(chē)瘾腰。公司的核心競(jìng)爭(zhēng)力是讓客戶(hù)以最快的速度叫到車(chē)皆的。

和公司業(yè)務(wù)人員調(diào)研后,我們把公司業(yè)務(wù)分成三個(gè)子域:(用戶(hù)/司機(jī))身份認(rèn)證子領(lǐng)域蹋盆、打車(chē)管理子域及報(bào)表子域费薄。

打車(chē)管理子域是核心子域硝全,我們以打車(chē)管理子域?yàn)槔崛【W(wǎng)上叫車(chē)的業(yè)務(wù)術(shù)語(yǔ)。

2. 業(yè)務(wù)術(shù)語(yǔ)表

業(yè)務(wù)規(guī)則:

打車(chē):經(jīng)認(rèn)證的用戶(hù)楞抡,打開(kāi)叫車(chē)應(yīng)用伟众,首先會(huì)定位,會(huì)在地圖上顯示附近的汽車(chē)召廷。用戶(hù)發(fā)起叫車(chē)后凳厢,系統(tǒng)會(huì)自動(dòng)通知離客戶(hù)最近的司機(jī)。用戶(hù)到達(dá)目的地后竞慢,系統(tǒng)自動(dòng)從用戶(hù)關(guān)聯(lián)的賬戶(hù)扣款先紫。

分配司機(jī):系統(tǒng)為用戶(hù)分配一個(gè)最近的司機(jī)

計(jì)費(fèi):系統(tǒng)根據(jù)用戶(hù)所乘車(chē)的當(dāng)前位置進(jìn)行計(jì)費(fèi)

扣款申請(qǐng):用戶(hù)到達(dá)目的地后,系統(tǒng)根據(jù)路程的長(zhǎng)遠(yuǎn)向用戶(hù)的銀行賬戶(hù)發(fā)送扣款申請(qǐng)

打車(chē)管理子域依賴(lài)于身份認(rèn)證子領(lǐng)域筹煮。只用經(jīng)過(guò)認(rèn)證的用戶(hù)和司機(jī)才可以使用打車(chē)管理App遮精,只有有足夠信用額度的用戶(hù)才可以打車(chē)存淫。運(yùn)營(yíng)報(bào)表依賴(lài)于打車(chē)管理子領(lǐng)域璧坟,運(yùn)營(yíng)報(bào)表目前僅需要從打車(chē)管理里提取用戶(hù)的消費(fèi)記錄,后面估計(jì)還會(huì)有其它需求邪媳。

角色和對(duì)象:

以打車(chē)管理限界上下文劫扒,分析參與者

在打車(chē)管理限界上下文里檬洞,有兩個(gè)明顯的角色:用戶(hù)和司機(jī)

用戶(hù):在打車(chē)App有有效的賬號(hào),有足夠的信用粟关,叫車(chē)時(shí)要有精確的位置

司機(jī):需要在打車(chē)App上注冊(cè)的,有有效的身份證明和駕駛證环戈,無(wú)不良記錄闷板。收到用戶(hù)的訂單后,將用戶(hù)從起始點(diǎn)安全地送到目的地院塞。

細(xì)致分析后遮晚,我們發(fā)現(xiàn)還有一個(gè)隱式的對(duì)象:訂單。從業(yè)務(wù)來(lái)看拦止,最終的目的還是為了多拿訂單县遣,從這個(gè)角度來(lái)看,訂單是比比用戶(hù)和司機(jī)都重要的業(yè)務(wù)對(duì)象汹族。

業(yè)務(wù)狀態(tài):

以打車(chē)管理限界上下文萧求,分析業(yè)務(wù)狀態(tài)

用戶(hù)已叫車(chē)、用戶(hù)已上車(chē)顶瞒、用戶(hù)已到達(dá)

二夸政、模型空間

1. 戰(zhàn)略建模:

身份認(rèn)證限界上下文、打車(chē)管理限界上下文榴徐、運(yùn)營(yíng)報(bào)表限界上下文


2. 戰(zhàn)術(shù)建模:

聚合:

訂單:是業(yè)務(wù)的真正關(guān)注點(diǎn)守问。訂單的根實(shí)體是訂單本身匀归、本次計(jì)費(fèi)總額,值對(duì)象為用戶(hù)的路途(起始位置耗帕、終止位置)穆端,關(guān)聯(lián)的實(shí)體包括用戶(hù)和司機(jī)。

用戶(hù):對(duì)于用戶(hù)仿便,在打車(chē)管理這個(gè)限界上下文里体啰,我們只關(guān)注用戶(hù)的ID、銀行賬戶(hù)探越。根實(shí)體是用戶(hù)狡赐,關(guān)聯(lián)實(shí)體是銀行賬戶(hù),包括賬號(hào)钦幔、銀行名稱(chēng)枕屉。用戶(hù)會(huì)發(fā)起叫車(chē)的事件。

司機(jī):在打車(chē)管理限界上下文里鲤氢,我們關(guān)注的是司機(jī)的id搀擂,車(chē)牌號(hào)及司機(jī)當(dāng)前位置。司機(jī)當(dāng)前位置為值對(duì)象卷玉。用戶(hù)上車(chē)后哨颂,司機(jī)會(huì)發(fā)出用戶(hù)已上車(chē)的信號(hào)。到達(dá)終點(diǎn)時(shí)相种,司機(jī)會(huì)發(fā)起已到達(dá)的事件

領(lǐng)域服務(wù):

用戶(hù)定位服務(wù):用戶(hù)打開(kāi)打車(chē)App時(shí)威恼,會(huì)自動(dòng)啟動(dòng)定位服務(wù),并顯示周?chē)乃緳C(jī)

分配司機(jī)服務(wù):收到用戶(hù)叫車(chē)的消息后寝并,為用戶(hù)分配一個(gè)最近的司機(jī)

計(jì)費(fèi)管理服務(wù):用戶(hù)上車(chē)后箫措,會(huì)實(shí)時(shí)搜集司機(jī)當(dāng)前位置,并實(shí)時(shí)計(jì)費(fèi)衬潦。當(dāng)收到已到達(dá)終點(diǎn)的信號(hào)時(shí)斤蔓,自動(dòng)向用戶(hù)管理賬號(hào)發(fā)起扣款申請(qǐng)。

領(lǐng)域事件:

用戶(hù)已叫車(chē)事件:由用戶(hù)發(fā)起

用戶(hù)已上車(chē)事件:由司機(jī)發(fā)起

用戶(hù)已到達(dá)事件:由司機(jī)發(fā)起

三镀岛、微服務(wù)設(shè)計(jì)

1. 打車(chē)管理微服務(wù)的設(shè)計(jì)

微服務(wù)里的微并不是越小越好弦牡。微服務(wù)和分布式架構(gòu)是相關(guān)聯(lián)的。分布式架構(gòu)第一原則是能不做分布式就不要分布式漂羊,對(duì)于微服務(wù)驾锰,是在能滿(mǎn)足業(yè)務(wù)需求的情況下,盡可能的不微走越。所以稻据,對(duì)于新的需求,微服務(wù)的粒度可以和限界上下文一對(duì)一映射。當(dāng)需求逐漸明晰了后捻悯,如果業(yè)務(wù)需要匆赃,微服務(wù)的最小粒度可以放到聚合的級(jí)別。

因?yàn)槭莿?chuàng)業(yè)公司今缚,對(duì)很對(duì)需求了解都還不夠細(xì)算柳,我們微服務(wù)粒度和限界上下文對(duì)應(yīng),現(xiàn)有的版本是V1.0

2. 聚合的設(shè)計(jì)

3. 領(lǐng)域服務(wù)的設(shè)計(jì)


4. 領(lǐng)域事件


5. 資源庫(kù)

定義訂單資源庫(kù)類(lèi)OrderRepository姓言。OrderReporsitory接口目前定義一種方法:findByUserID瞬项,返回和該ID相關(guān)聯(lián)的用戶(hù)的所有訂單

OrderRepository基于Repository接口。在Repository接口里定義三種方法:add何荚、remove囱淋、update。用來(lái)增加餐塘、刪除妥衣、更新訂單


四、總結(jié)

DDD并不是一個(gè)新的架構(gòu)方法戒傻,它在微服務(wù)概念提出之前就已經(jīng)出現(xiàn)了税手。微服務(wù)概念提出后,大家都認(rèn)為很好需纳,但是對(duì)于如何設(shè)計(jì)微服務(wù)當(dāng)時(shí)沒(méi)有給出一個(gè)很好的方法芦倒,后來(lái),大家套用了DDD的理念來(lái)設(shè)計(jì)微服務(wù)不翩,發(fā)現(xiàn)這種方法是可行的兵扬,DDD的很多理念也和微服務(wù)是一致的

本文中的舉例口蝠,對(duì)業(yè)務(wù)的理解不一定到位器钟,我也相信會(huì)有更好的模型,領(lǐng)域事件的設(shè)計(jì)也偷懶了亚皂,請(qǐng)大家多多指教俱箱。

下一節(jié)国瓮,我們會(huì)基于目前的設(shè)計(jì)灭必,利用Spring Cloud框架開(kāi)發(fā)叫車(chē)管理微服務(wù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乃摹,一起剝皮案震驚了整個(gè)濱河市禁漓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孵睬,老刑警劉巖播歼,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡秘狞,警方通過(guò)查閱死者的電腦和手機(jī)叭莫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)烁试,“玉大人雇初,你說(shuō)我怎么就攤上這事〖跸欤” “怎么了靖诗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)支示。 經(jīng)常有香客問(wèn)我刊橘,道長(zhǎng),這世上最難降的妖魔是什么颂鸿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任促绵,我火速辦了婚禮,結(jié)果婚禮上据途,老公的妹妹穿的比我還像新娘绞愚。我一直安慰自己,他們只是感情好颖医,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布位衩。 她就那樣靜靜地躺著,像睡著了一般熔萧。 火紅的嫁衣襯著肌膚如雪糖驴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天佛致,我揣著相機(jī)與錄音贮缕,去河邊找鬼。 笑死俺榆,一個(gè)胖子當(dāng)著我的面吹牛感昼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罐脊,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼定嗓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了萍桌?” 一聲冷哼從身側(cè)響起宵溅,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎上炎,沒(méi)想到半個(gè)月后恃逻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年寇损,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凸郑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矛市,死狀恐怖线椰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尘盼,我是刑警寧澤憨愉,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站卿捎,受9級(jí)特大地震影響配紫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜午阵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一躺孝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧底桂,春花似錦植袍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至暮顺,卻和暖如春厅篓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捶码。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工羽氮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惫恼。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓档押,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親祈纯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子令宿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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