DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)理論篇

一、Why DDD惠桃?

在加入X公司后辖试,開(kāi)始了ASP.NET Core+Docker+Linux的技術(shù)實(shí)踐,也開(kāi)始了微服務(wù)架構(gòu)的實(shí)踐呐馆。在微服務(wù)的學(xué)習(xí)中汹来,有一本微軟官方出品的《.NET微服務(wù):容器化.NET應(yīng)用架構(gòu)指南》是我們學(xué)習(xí)的葵花寶典改艇,縱觀微軟官方放出來(lái)的Demo項(xiàng)目的演變歷史(可以參見(jiàn)楊曉東《我眼中的ASP.NET Core微服務(wù)》一文):

 ≮诵帧(1)PetShop:WebForm 的示例程序。典型的三層架構(gòu)風(fēng)格的應(yīng)用程序邻耕。

  (2)MusicStore: 針對(duì)于 MVC3~5 框架和 EF 的一個(gè)示例程序啼辣。無(wú)明顯架構(gòu)風(fēng)格熙兔。

 “铡(3)eShop: 針對(duì)于 ASP.NET Core 的示例程序钠绍,它是一個(gè) REST架構(gòu)風(fēng)格的應(yīng)用程序。

  分析其架構(gòu)風(fēng)格的轉(zhuǎn)變可以看出媳握,現(xiàn)代應(yīng)用程序架構(gòu)已經(jīng)從單一的傳統(tǒng)風(fēng)格架構(gòu)(N-Layered)轉(zhuǎn)向了多種混合風(fēng)格架構(gòu)(Mixed-Style)磷脯,像最新的eShopOnWeb/Container項(xiàng)目就包含了以下多種架構(gòu)風(fēng)格:

  我們可以看到赵誓,其中主要包括了以下兩種架構(gòu)風(fēng)格(雖然看起來(lái)好像有四種):

基于數(shù)據(jù)驅(qū)動(dòng)的CRUD微服務(wù) (比如上圖中Catalog Microservice和Basket Microservice)

基于DDD的微服務(wù)(比如上圖中的Ordering Microservice 訂單微服務(wù))

目前俩功,我所在的開(kāi)發(fā)團(tuán)隊(duì)仍然在使用第一種-基于數(shù)據(jù)驅(qū)動(dòng)的CRUD微服務(wù)诡蜓,而要面對(duì)的業(yè)務(wù)卻逐步變得復(fù)雜,已經(jīng)強(qiáng)烈感到數(shù)據(jù)驅(qū)動(dòng)的復(fù)雜度椿肩、不好維護(hù)度以及溝通成本豺谈,因此需要了解一下為復(fù)雜業(yè)務(wù)而生的DDD核无。不可否認(rèn),很多人是因?yàn)槲⒎?wù)才來(lái)了解 DDD 的(沒(méi)錯(cuò)噪沙,說(shuō)的就是我)。

來(lái)自ThoughtWorks的咨詢(xún)師王威說(shuō)道:在聽(tīng)說(shuō)了微服務(wù)架構(gòu)之后辐马,人們覺(jué)得采用微服務(wù)架構(gòu)會(huì)讓系統(tǒng)開(kāi)發(fā)與運(yùn)維管理變得簡(jiǎn)單高效喜爷,同時(shí)實(shí)現(xiàn)的系統(tǒng)會(huì)更加合理萄唇,更加高可用另萤、高性能,但是當(dāng)他們實(shí)際去做微服務(wù)架構(gòu)的時(shí)候泛源,有不少人會(huì)發(fā)現(xiàn)自己做得并不好忿危,沒(méi)法取得人們“吹捧”的那些效果达箍,“就算用了微服務(wù)架構(gòu)也不能解決他們的問(wèn)題,反而帶來(lái)很多開(kāi)發(fā)與運(yùn)維上的負(fù)擔(dān)”铺厨。于是他們?nèi)プ稍?xún)缎玫、去找方法,最后發(fā)現(xiàn)其實(shí)是自己劃分微服務(wù)的方法出錯(cuò)了努释,這個(gè)時(shí)候才知道人們?cè)谡務(wù)撐⒎?wù)的時(shí)候,其實(shí)都沒(méi)有講到一個(gè)點(diǎn):應(yīng)該用 DDD 的思想去指導(dǎo)微服務(wù)的實(shí)踐咬摇。

  那么伐蒂,DDD又是什么呢?

DDD 是一種在面向高度復(fù)雜的軟件系統(tǒng)時(shí)肛鹏,關(guān)于如何去建模的方法論,“它的關(guān)鍵點(diǎn)是根據(jù)系統(tǒng)的復(fù)雜程度在扰,建立合適的模型”缕减。在一個(gè)系統(tǒng)中,沒(méi)有一個(gè)人能完全掌握系統(tǒng)的全貌芒珠,在多人參與的系統(tǒng)中桥狡,DDD 正是可以通過(guò)在不同角色之間進(jìn)行協(xié)作,使參與者達(dá)成統(tǒng)一認(rèn)知,對(duì)齊系統(tǒng)設(shè)計(jì)與程序?qū)嶋H所服務(wù)的業(yè)務(wù)領(lǐng)域裹芝。

摘自 ThoughtWorks資深咨詢(xún)師?Alberto Brandolini

  從上圖中來(lái)看DDD 的一個(gè)生命周期大概是這樣的:在設(shè)計(jì)和實(shí)現(xiàn)一個(gè)系統(tǒng)的時(shí)候部逮,這個(gè)系統(tǒng)所要處理問(wèn)題的領(lǐng)域?qū)<液烷_(kāi)發(fā)人員以一套統(tǒng)一語(yǔ)言進(jìn)行協(xié)作,共同完成該領(lǐng)域模型的構(gòu)建嫂易,在這個(gè)過(guò)程中兄朋,業(yè)務(wù)架構(gòu)和系統(tǒng)架構(gòu)等問(wèn)題都得到了解決,之后將領(lǐng)域模型中關(guān)于系統(tǒng)架構(gòu)的主體映射為實(shí)現(xiàn)代碼怜械,完成系統(tǒng)的實(shí)現(xiàn)落地颅和。而用什么方式去做領(lǐng)域模型的構(gòu)建,方法是多樣的缕允,看具體選擇了峡扩。

  這里有3個(gè)要點(diǎn),借助專(zhuān)家之眼來(lái)看看:

首先灼芭,在 DDD 中有额,使用一個(gè)統(tǒng)一語(yǔ)言,可以直接將業(yè)務(wù)架構(gòu)與系統(tǒng)架構(gòu)綁定彼绷,不需要進(jìn)一步去翻譯巍佑,從而增強(qiáng)系統(tǒng)對(duì)業(yè)務(wù)的響應(yīng)速度。

其次寄悯,DDD 關(guān)注的是要構(gòu)建的系統(tǒng)中萤衰,關(guān)于所要解決的問(wèn)題的業(yè)務(wù)、流程和數(shù)據(jù)等內(nèi)容是如何工作的猜旬,在這些東西理清之后脆栋,DDD 去構(gòu)建出一個(gè)模型,接著再去選擇具體的實(shí)現(xiàn)技術(shù)洒擦。DDD 強(qiáng)調(diào)的是解耦具體實(shí)現(xiàn)技術(shù)椿争,所以它可以迅速梳理核心業(yè)務(wù)邏輯。

最后熟嫩,DDD 并不是直接給你建議某一個(gè)系統(tǒng)架構(gòu)秦踪,它的執(zhí)行結(jié)果是呈現(xiàn)一個(gè)方案,可以從這個(gè)構(gòu)建出的模型中決定你去用什么技術(shù)來(lái)實(shí)現(xiàn)什么樣的架構(gòu)掸茅,進(jìn)而來(lái)完成一個(gè)系統(tǒng)的設(shè)計(jì)椅邓。備選的各種技術(shù)只是像一個(gè)列表一樣擺在眼前,它要根據(jù)你的領(lǐng)域需求來(lái)選擇昧狮,比如“選擇采用微服務(wù)架構(gòu)”景馁。

二、精華筆記

--下面考慮到閱讀體驗(yàn)逗鸣,將其分為兩個(gè)Part的導(dǎo)圖合住。

2.1 Part 1

2.2 Part 2

完整版思維導(dǎo)圖瀏覽地址:點(diǎn)此瀏覽ProcessOn大圖

三绰精、后續(xù)學(xué)習(xí)

  本次學(xué)習(xí)只是一個(gè)簡(jiǎn)單的DDD的相關(guān)基礎(chǔ)理論學(xué)習(xí),后續(xù)會(huì)閱讀Scott Millett和Nick Tune編著的《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)模式聊疲、原理與實(shí)踐》一書(shū)進(jìn)行深入學(xué)習(xí)茬底,然后會(huì)研究經(jīng)典DDD分層架構(gòu)與eShopOnContainers示例項(xiàng)目中的簡(jiǎn)化DDD微服務(wù)架構(gòu),最后也會(huì)總結(jié)一下要點(diǎn)分享出來(lái)获洲。

參考資料

顏圣杰阱表,《DDD理論學(xué)習(xí)系列文章

Alberto Brandolini、王威贡珊,《不用DDD最爬,那你的微服務(wù)可能都做錯(cuò)了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市门岔,隨后出現(xiàn)的幾起案子爱致,更是在濱河造成了極大的恐慌,老刑警劉巖寒随,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糠悯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡妻往,警方通過(guò)查閱死者的電腦和手機(jī)互艾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)讯泣,“玉大人纫普,你說(shuō)我怎么就攤上這事『们” “怎么了昨稼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拳锚。 經(jīng)常有香客問(wèn)我假栓,道長(zhǎng),這世上最難降的妖魔是什么霍掺? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任匾荆,我火速辦了婚禮,結(jié)果婚禮上抗楔,老公的妹妹穿的比我還像新娘棋凳。我一直安慰自己拦坠,他們只是感情好连躏,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著贞滨,像睡著了一般入热。 火紅的嫁衣襯著肌膚如雪拍棕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天勺良,我揣著相機(jī)與錄音绰播,去河邊找鬼。 笑死尚困,一個(gè)胖子當(dāng)著我的面吹牛蠢箩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播事甜,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谬泌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了逻谦?” 一聲冷哼從身側(cè)響起掌实,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邦马,沒(méi)想到半個(gè)月后贱鼻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滋将,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年邻悬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耕渴。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拘悦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出橱脸,到底是詐尸還是另有隱情础米,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布添诉,位于F島的核電站屁桑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏栏赴。R本人自食惡果不足惜蘑斧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望须眷。 院中可真熱鬧竖瘾,春花似錦、人聲如沸花颗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扩劝。三九已至庸论,卻和暖如春职辅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聂示。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工域携, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鱼喉。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓秀鞭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扛禽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子气筋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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

  • 完整版文章請(qǐng)?jiān)L問(wèn)我的個(gè)人博客查看:damienzhong.com 微服務(wù) “微服務(wù)架構(gòu)(Microservice ...
    呆萌鐘閱讀 732評(píng)論 0 2
  • 資料來(lái)源:有架構(gòu)給我的一些資料,以及自己百度和論壇旋圆、社區(qū)找來(lái)的一些資料宠默,權(quán)當(dāng)做一個(gè)總結(jié)式的簡(jiǎn)介。灵巧。搀矫。 目錄如下: ...
    AlbenXie閱讀 52,450評(píng)論 4 57
  • 報(bào)名了心靈自由寫(xiě)作小組瓤球,卻已多天沒(méi)有寫(xiě)作。 客觀原因是有的敏弃。旅行在外一周卦羡,工作、課程麦到、會(huì)友不斷绿饵,時(shí)間似乎真的有限。...
    燕英俊閱讀 344評(píng)論 1 2
  • 爸爸會(huì)好好努力瓶颠,明年回來(lái)陪你拟赊。
    c0aa1d02b103閱讀 269評(píng)論 0 0