實現(xiàn)領(lǐng)域驅(qū)動設(shè)計- 入門

What's DDD?

DDD的目標:創(chuàng)建可測試、可伸縮蒸矛、組織良好的軟件模型瀑罗。

DDD不是關(guān)于技術(shù)的,而是關(guān)于討論雏掠、聆聽斩祭、理解和發(fā)現(xiàn)業(yè)務(wù)價值的,都是為了將知識集中起來乡话。
但是并不是說技術(shù)不重要摧玫,尤其是涉及到架構(gòu)與模塊設(shè)計,之間的設(shè)計模式以及一些面向?qū)ο蟮乃枷搿?/p>

什么是領(lǐng)域模型绑青?
領(lǐng)域模型是關(guān)于某個特定業(yè)務(wù)領(lǐng)域的軟件模型诬像。通常,領(lǐng)域模型通過對象模型來實現(xiàn)时迫,這些對象同時包含了數(shù)據(jù)和行為颅停,并且表達了準確的業(yè)務(wù)含義。

Why DDD?

軟件開發(fā)過程中的問題

  • “隨著業(yè)務(wù)的擴展掠拳,軟件開發(fā)投資越來越大” 團隊的規(guī)模也開始變得越來越大癞揉,軟件系統(tǒng)的投資和維護的成本變得越來越高。
  • “業(yè)務(wù)人員不懂架構(gòu)溺欧,架構(gòu)師不懂代碼喊熟,開發(fā)人員不不懂業(yè)務(wù)模型” 當團隊中的關(guān)鍵角色誰也不懂誰的時候,問題來了姐刁。芥牌。。
  • “重構(gòu)是好的聂使,但什么時候要重構(gòu)壁拉?重構(gòu)到什么樣的架構(gòu)就是夠?的了?” 每個有追求的團隊都在做重構(gòu)柏靶,但管理者更關(guān)心弃理,什么時間必須要重構(gòu)?重構(gòu)的目標在哪屎蜓?

采用DDD的原因

  • 業(yè)務(wù)沉淀痘昌,知識共享
  • 業(yè)務(wù)人員及技術(shù)人員之間信息的準確傳遞
  • 幫助業(yè)務(wù)人員與技術(shù)人員自我提高
  • DDD同時提供了戰(zhàn)略設(shè)計與戰(zhàn)術(shù)設(shè)計。戰(zhàn)略設(shè)計幫助我們理解哪些投入是重要的;哪些軟件資產(chǎn)是可以復用的辆苔;哪些人應(yīng)當被加入到團隊中算灸。戰(zhàn)術(shù)設(shè)計則幫助我們創(chuàng)建DDD模型中的各個部件。

DDD如何幫助我們驻啤?
DDD主要關(guān)注三個方面:

  • 將領(lǐng)域?qū)<遗c開發(fā)人員聚集到一起菲驴,創(chuàng)建一套適用于領(lǐng)域建模的通用語言。通用語言必須在全隊內(nèi)部達成一致街佑。
  • DDD關(guān)注業(yè)務(wù)戰(zhàn)略谢翎。戰(zhàn)略設(shè)計用于清楚的區(qū)分不同的系統(tǒng)與業(yè)務(wù)關(guān)注點捍靠;更進一步指引我們實現(xiàn)面向服務(wù)架構(gòu)(SOA)或者業(yè)務(wù)驅(qū)動架構(gòu)(BDA)
  • 通過使用戰(zhàn)術(shù)設(shè)計建模工具沐旨,滿足軟件真正的技術(shù)需求。

DDD的業(yè)務(wù)價值:

  • 業(yè)務(wù)得到更準確的定義與理解
  • 領(lǐng)域?qū)<乙材軈⑴c到軟件設(shè)計中來
  • 更好的用于體驗
  • 企業(yè)架構(gòu)
  • 敏捷榨婆、迭代磁携、持續(xù)建模

When DDD?

  • 業(yè)務(wù)復雜度高
  • 需求的未知性
  • 領(lǐng)域的未知性
Adapted from Martin Fowler's PoEAA

處理領(lǐng)域復雜性
將重要的、復雜的模型稱為核心域(Core Domain)良风。
將相對次要的稱為支撐子域(Supporting Subdomain)谊迄。

貧血領(lǐng)域?qū)ο螅ˋnemic Domian Model)
缺少內(nèi)在行為的領(lǐng)域?qū)ο蟆?/p>

  • 業(yè)務(wù)沒有沉淀在對應(yīng)的模型中;
  • 隨時間推移烟央,業(yè)務(wù)邏輯被遺忘统诺;代碼風險變高

How DDD?

對于初步接觸DDD的團隊而言,事件風暴工作坊是一個很好的開始疑俭×改兀可以參考寫過的一篇事件風暴工作坊的實踐和總結(jié)和網(wǎng)上的一些其他資源。

以下是從DDD的經(jīng)典書籍中摘錄的一些實踐方式钞艇。
DDD兩大支柱:通用語言(Ubiquitous Language)限界上下文(Bounded Context)啄寡。
通用語言是團隊的共享語言。領(lǐng)域?qū)<遗c開發(fā)者使用相同的通用語言進行交流哩照。通用語言的更改挺物,就是對領(lǐng)域模型的更改。
通用語言的缺失將造成高昂的解釋與誤解溝通成本飘弧。
限界上下文(Bounded Context)是應(yīng)用程序的一個概念性邊界识藤,這個邊界內(nèi)的各種領(lǐng)域?qū)儆凇簿褪峭ㄓ谜Z言,有確定的上下文含義次伶。在邊界之外痴昧,這些術(shù)語可能表示不同的意思。

如何制定通用語言学少?

  • 繪制物理模型圖剪个,概念模型圖等,標以名字和行為
  • 創(chuàng)建一個包含簡單定義的術(shù)語表
  • 如果不喜歡術(shù)語表,也可以采用其他類型的文檔扣囊。同時將那些“不正式的”模型圖也給包括進去
  • 與團隊其他成員來檢驗成本乎折,并且溝通迭代

TIPS:

  • 通用語言通常只在團隊范圍內(nèi)使用,表示一個單一的領(lǐng)域模型
  • 如果試圖創(chuàng)建企業(yè)級乃至更大范圍的通用語言時侵歇,幾乎一定會失敗
  • 通用語言與限界上下文有一對一的關(guān)系
  • 限界上下文也很小骂澄,剛好可以容納一個獨立業(yè)務(wù)領(lǐng)域使用的通用語言
  • 每個限界上下文有自己的通用語言,和其他限界上下文打交道時惕虑,可以通過上下文映射圖來集成坟冲。

實現(xiàn)DDD的挑戰(zhàn)

  • 創(chuàng)建通用語言時候,時間精力的投入
  • 持續(xù)的引入領(lǐng)域?qū)<?/li>
  • 改變開發(fā)者對領(lǐng)域的思考方式

DDD與敏捷結(jié)合的實踐

結(jié)合Scrum的思想溃蔫,DDD也傾向于“測試先行健提,逐步改進的策略”。
即便再專業(yè)的領(lǐng)域?qū)<椅芭眩矡o法在業(yè)務(wù)初期進行完美的設(shè)計私痹。
開發(fā)一個新的領(lǐng)域?qū)ο髸r,可以采用以下步驟:

  • 編寫測試代碼统刮,模擬客戶端使用該領(lǐng)域?qū)ο?/li>
  • 創(chuàng)建該領(lǐng)域?qū)ο笠允箿y試代碼可以編譯通過
  • 對測試與領(lǐng)域?qū)ο笾貥?gòu)紊遵。測試能正確的模擬客戶代碼,領(lǐng)域?qū)ο罂梢员砻鳂I(yè)務(wù)行為
  • 實現(xiàn)領(lǐng)域?qū)ο?/li>
  • 向團隊成員侥蒙,包括領(lǐng)域?qū)<野的ぃ故敬a,以保證領(lǐng)域?qū)ο竽苷_的反映通用語言
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鞭衩,一起剝皮案震驚了整個濱河市学搜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌醋旦,老刑警劉巖恒水,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饲齐,居然都是意外死亡钉凌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門捂人,熙熙樓的掌柜王于貴愁眉苦臉地迎上來御雕,“玉大人,你說我怎么就攤上這事滥搭∷岣伲” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵瑟匆,是天一觀的道長闽坡。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么疾嗅? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任外厂,我火速辦了婚禮,結(jié)果婚禮上代承,老公的妹妹穿的比我還像新娘汁蝶。我一直安慰自己,他們只是感情好论悴,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布掖棉。 她就那樣靜靜地躺著,像睡著了一般膀估。 火紅的嫁衣襯著肌膚如雪幔亥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天玖像,我揣著相機與錄音紫谷,去河邊找鬼齐饮。 笑死捐寥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的祖驱。 我是一名探鬼主播握恳,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捺僻!你這毒婦竟也來了乡洼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤匕坯,失蹤者是張志新(化名)和其女友劉穎束昵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葛峻,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡锹雏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了术奖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片礁遵。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖采记,靈堂內(nèi)的尸體忽然破棺而出佣耐,到底是詐尸還是另有隱情,我是刑警寧澤唧龄,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布兼砖,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏讽挟。R本人自食惡果不足惜然走,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戏挡。 院中可真熱鬧芍瑞,春花似錦、人聲如沸褐墅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽书释。三九已至,卻和暖如春甩栈,著一層夾襖步出監(jiān)牢的瞬間逝钥,已是汗流浹背屑那。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留艘款,地道東北人持际。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像哗咆,于是被迫代替她去往敵國和親蜘欲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

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

  • GitChat課程《領(lǐng)域驅(qū)動設(shè)計--戰(zhàn)略篇》筆記晌柬,課程作者張逸 一.理解限界上下文 1.限界上下文的定義 限界上下...
    莫小歸閱讀 5,791評論 1 11
  • DDD入門 領(lǐng)域驅(qū)動設(shè)計作為一種軟件方法姥份,它可以幫助我們設(shè)計高質(zhì)量的軟件模型。在正確實現(xiàn)的情況下年碘,我們通過DDD完...
    AI云棧閱讀 374評論 0 1
  • 材料:素描紙澈歉,炭筆 小提醒:那個陶瓷不是我畫的,西紅柿也是我中途接手屿衅,然后都是我畫的
    Mr丹閱讀 230評論 0 1
  • 2017年11月22日 星期三 多云 今天看見老師在群里面說請一直堅持寫親子日子的家長埃难,把孩子...
    王旌宇閱讀 245評論 0 0