(轉(zhuǎn))領(lǐng)域驅(qū)動設(shè)計(DDD:Domain-Driven Design)

Eric Evans的“Domain-Driven Design領(lǐng)域驅(qū)動設(shè)計”簡稱DDD窟哺,Evans DDD是一套綜合軟件系統(tǒng)分析和設(shè)計的面向?qū)ο蠼7椒ㄌ及菊綣don.com是國內(nèi)公開最早討論DDD網(wǎng)站之一意鲸,可訂閱DDD專題。初學(xué)者學(xué)習(xí)DDD可從研究本站Jdon框架的DDD應(yīng)用源碼開始,戳這里開始

過去系統(tǒng)分析和系統(tǒng)設(shè)計都是分離的济舆,正如我們國家“系統(tǒng)分析師” 和“系統(tǒng)設(shè)計師” 兩種職稱考試一樣,這樣割裂的結(jié)果導(dǎo)致莺债,需求分析的結(jié)果無法直接進(jìn)行設(shè)計編程滋觉,而能夠進(jìn)行編程運行的代碼卻扭曲需求,導(dǎo)致客戶運行軟件后才發(fā)現(xiàn)很多功能不是自己想要的齐邦,而且軟件不能快速跟隨需求變化椎侠。

DDD則打破了這種隔閡,提出了領(lǐng)域模型概念措拇,統(tǒng)一了分析和設(shè)計編程我纪,使得軟件能夠更靈活快速跟隨需求變化。見下面DDD與傳統(tǒng)CRUD或過程腳本或者面向數(shù)據(jù)表等在開發(fā)效率上比較:


23142654.png

服務(wù)器后端發(fā)展三個階段:

  1. UI+DataBase的兩層架構(gòu),這種面向數(shù)據(jù)庫的架構(gòu)(上圖table module )沒有靈活性浅悉。
  2. UI+Service+DataBase的多層SOA架構(gòu)趟据,這種服務(wù)+表模型的架構(gòu)易使服務(wù)變得囊腫,難于維護(hù)拓展仇冯,伸縮性能差之宿,見這里討論Spring Web 應(yīng)用的最大敗筆.
  3. DDD+SOA的事件驅(qū)動的CQRS讀寫分離架構(gòu)族操,應(yīng)付復(fù)雜業(yè)務(wù)邏輯苛坚,以聚合模型替代數(shù)據(jù)表模型,以并發(fā)的事件驅(qū)動替代串聯(lián)的消息驅(qū)動色难。真正實現(xiàn)以業(yè)務(wù)實體為核心的靈活拓展泼舱。

DDD革命性在于:領(lǐng)域模型準(zhǔn)確反映了業(yè)務(wù)語言,而傳統(tǒng)J2EE或Spring+Hibernate等事務(wù)性編程模型只關(guān)心數(shù)據(jù)枷莉,這些數(shù)據(jù)對象除了簡單setter/getter方法外娇昙,沒有任何業(yè)務(wù)方法,被比喻成失血模型笤妙,那么領(lǐng)域模型這種帶有業(yè)務(wù)方法的充血模型到底好在哪里冒掌?

比賽Match為案例,比賽有“開始”和“結(jié)束”等業(yè)務(wù)行為蹲盘,但是傳統(tǒng)經(jīng)典的方式是將“開始”和“結(jié)束”行為放在比賽的服務(wù)Service中股毫,而不是放在比賽對象本身之中。我們不能因為用了計算機(jī)召衔,用了數(shù)據(jù)庫铃诬,用了框架,業(yè)務(wù)模型反而被技術(shù)框架給綁架苍凛,就像人雖然是由母親生的趣席,但是人的吃喝拉撒母親不能替代,更不能以母愛名義肢解人的正常職責(zé)行為醇蝴,如果是這樣宣肚,這個人就是被母愛綁架了。

提倡充血模型悠栓,實際就是讓過去被肢解被黑crack的業(yè)務(wù)模型回歸正常霉涨,當(dāng)然這也會被一些先入為主或被洗過腦的程序員看成反而不正常,這更是極大可悲之處闸迷∏陡伲看到領(lǐng)域模型代碼,就看到業(yè)務(wù)需求腥沽,沒有翻譯沒有轉(zhuǎn)換逮走,保證軟件真正實現(xiàn)“拷貝不走樣”。

DDD最大的好處是:接觸到需求第一步就是考慮領(lǐng)域模型今阳,而不是將其切割成數(shù)據(jù)和行為师溅,然后數(shù)據(jù)用數(shù)據(jù)庫實現(xiàn)茅信,行為使用服務(wù)實現(xiàn),最后造成需求的首肢分離墓臭。DDD讓你首先考慮的是業(yè)務(wù)語言蘸鲸,而不是數(shù)據(jù)。重點不同導(dǎo)致編程世界觀不同窿锉。

DDD是解決復(fù)雜中大型軟件的一套行之有效方式酌摇,在國外已經(jīng)成為主流。DDD認(rèn)為很多原因造成軟件的復(fù)雜性嗡载,我們不可能避免這些復(fù)雜性窑多,能做的是對復(fù)雜的問題進(jìn)行控制。而一個好的領(lǐng)域模型是控制復(fù)雜問題的關(guān)鍵洼滚。領(lǐng)域模型的價值在于提供一種通用的語言埂息,使得領(lǐng)域?qū)<液蛙浖夹g(shù)人員聯(lián)系在一起,溝通無歧義遥巴。

DDD在軟件生產(chǎn)流程中定位i如下圖千康,DDD落地實現(xiàn)離不開in-memory緩存CQRS铲掐、 DCI拾弃、 EDAEvent Source幾大大相關(guān)領(lǐng)域。

23142654.png

  2012年Eric Evans關(guān)于技術(shù)如何影響DDD的會話

領(lǐng)域驅(qū)動設(shè)計參考

  領(lǐng)域驅(qū)動設(shè)計簡介 PDF

  聚合與一致性和有界上下文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迹炼,一起剝皮案震驚了整個濱河市砸彬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斯入,老刑警劉巖砂碉,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異刻两,居然都是意外死亡增蹭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門磅摹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滋迈,“玉大人,你說我怎么就攤上這事户誓”樱” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵帝美,是天一觀的道長碍彭。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么庇忌? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任舞箍,我火速辦了婚禮,結(jié)果婚禮上皆疹,老公的妹妹穿的比我還像新娘疏橄。我一直安慰自己,他們只是感情好略就,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布捎迫。 她就那樣靜靜地躺著,像睡著了一般残制。 火紅的嫁衣襯著肌膚如雪立砸。 梳的紋絲不亂的頭發(fā)上掖疮,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天初茶,我揣著相機(jī)與錄音,去河邊找鬼浊闪。 笑死恼布,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搁宾。 我是一名探鬼主播折汞,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盖腿!你這毒婦竟也來了爽待?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤翩腐,失蹤者是張志新(化名)和其女友劉穎鸟款,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茂卦,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡何什,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了等龙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片处渣。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蛛砰,靈堂內(nèi)的尸體忽然破棺而出罐栈,到底是詐尸還是另有隱情,我是刑警寧澤泥畅,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布荠诬,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浅妆。R本人自食惡果不足惜望迎,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凌外。 院中可真熱鬧辩尊,春花似錦、人聲如沸康辑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疮薇。三九已至胸墙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間按咒,已是汗流浹背迟隅。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留励七,地道東北人智袭。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像掠抬,于是被迫代替她去往敵國和親吼野。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 有位朋友最近在為企業(yè)做領(lǐng)域驅(qū)動設(shè)計(Domain Driven Design)內(nèi)訓(xùn)時,遇到一位資深學(xué)員向他抱怨該技...
    MagicBowen閱讀 18,632評論 8 66
  • 前言 這篇文章假設(shè)你已經(jīng)初步了解過領(lǐng)域驅(qū)動設(shè)計(DDD)的基本概念(聚合根腰奋、實體单起、值對象、領(lǐng)域服務(wù)氛堕、領(lǐng)域事件馏臭、資源...
    放飛的馬閱讀 52,404評論 20 117
  • 題目 以下代碼的輸出什么? 分析與解答 答案是: Thread.join方法是將指定線程加入當(dāng)前線程,將兩個交替執(zhí)...
    DeppWang閱讀 3,202評論 0 3
  • 十六個夏天讼稚,五個人的青春成長歷程括儒。 暗戀、迷茫锐想、相愛帮寻、婚變、失業(yè)赠摇、離世…… 人生難免經(jīng)歷苦痛固逗,有隔閡浅蚪,有怨恨,但幸...
    燏兒閱讀 479評論 0 0