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

最近在換工作,利用間隙看了兩本領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的經(jīng)典書籍:《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):軟件核心復(fù)雜性應(yīng)對之道》冰寻,《實(shí)現(xiàn)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》揣钦。

領(lǐng)域設(shè)計(jì)中的元素

限界上下文

  • 限界上下文是一個(gè)顯式的邊界计贰,領(lǐng)域模型便存在于這個(gè)邊界之內(nèi)孔厉。
  • 通俗來講上下文可以認(rèn)為是一個(gè)能夠獨(dú)立運(yùn)轉(zhuǎn)的模塊。同一種概念在不同上下文中可能具有不同的意義钧嘶。
  • 不同上下文之間可以用RPC/REST接口訪問(使用防腐層確保上下文數(shù)據(jù)安全)棠众,或領(lǐng)域事件進(jìn)行通信(可以實(shí)現(xiàn)上下文更高的自治性)。`
  • 例:采購上下文有决,庫存上下文闸拿。

實(shí)體

  • 實(shí)體是一個(gè)唯一的東西空盼,并且可以在相當(dāng)長的一段時(shí)間內(nèi)持續(xù)地變化,擁有唯一的身份標(biāo)識(shí)新荤。
  • 實(shí)體不應(yīng)該是貧血的揽趾,實(shí)體擁有業(yè)務(wù)邏輯。
  • Hibernate框架可以實(shí)現(xiàn)實(shí)體-數(shù)據(jù)映射迟隅。

值對象

  • 值對象是一個(gè)不變的數(shù)字但骨,字符串或一種用來描述的對象励七。
  • 值對象類似DTO的概念智袭。

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

  • 領(lǐng)域中的服務(wù)表示一個(gè)無狀態(tài)的操作,它用于實(shí)現(xiàn)特定于某個(gè)領(lǐng)域的任務(wù)掠抬。
  • 當(dāng)某個(gè)操作不適合放在聚合和值對象上時(shí)吼野,最好的方式便是使用領(lǐng)域服務(wù)了。
  • 過度使用領(lǐng)域服務(wù)可能會(huì)造成貧血模型两波。

領(lǐng)域事件

  • 用來捕獲發(fā)生在領(lǐng)域中的一些事情瞳步。
  • 可以用于向遠(yuǎn)程限界上下文發(fā)布領(lǐng)域事件。
  • 消息的一致性實(shí)現(xiàn)腰奋,消息時(shí)延問題单起。
  • 消息中間件(RabbitMQ)

聚合

  • 將實(shí)體和值對象在一致性邊界之內(nèi)組成聚合。
  • 設(shè)計(jì)小聚合劣坊。通過唯一標(biāo)識(shí)引用其他聚合嘀倒,避免大對象給JVM造成負(fù)擔(dān)。
  • 原則上一次事務(wù)只操作一個(gè)聚合局冰,這樣服務(wù)會(huì)有更好的伸縮性和分布式特性测蘑。
  • 在一個(gè)事務(wù)中操作大聚合對象,高并發(fā)時(shí)容易造成失敗康二。

工廠

  • 用來創(chuàng)建模型對象碳胳,對客戶端隱藏創(chuàng)建的細(xì)節(jié)。

資源庫

  • 資源庫表示一個(gè)安全的存儲(chǔ)區(qū)域沫勿,并且對其中所存放的物品起保護(hù)作用挨约。
  • 存在一些額外的行為,如統(tǒng)計(jì)數(shù)量产雹。

應(yīng)用服務(wù)

  • 用戶界面使用應(yīng)用服務(wù)來協(xié)調(diào)用例任務(wù)诫惭,管理事務(wù),并執(zhí)行一些必要的安全授權(quán)洽故。

心得體會(huì)

  • 當(dāng)應(yīng)用程序業(yè)務(wù)邏輯越來越復(fù)雜的時(shí)候贝攒,使用面向數(shù)據(jù)開發(fā)方式會(huì)越來越吃力。無限多的條件判斷來控制不同的業(yè)務(wù)邏輯时甚,修改一個(gè)功能也不知道會(huì)引起其他業(yè)務(wù)邏輯上的問題隘弊。
  • 我在項(xiàng)目的中期嘗試引入DDD哈踱,靠自己對面向?qū)ο蟮睦斫夂鸵恍┚W(wǎng)上文章的經(jīng)驗(yàn),還是收到了一些不錯(cuò)的效果:使得業(yè)務(wù)設(shè)計(jì)層面與實(shí)現(xiàn)層面能夠分離梨熙,讓應(yīng)用程序有更好的可擴(kuò)展性开镣,避免業(yè)務(wù)邏輯之間有過多的牽扯。
  • 如今微服務(wù)概念流行咽扇,按DDD的方式劃分出限界上下文領(lǐng)域事件邪财,正好可以讓業(yè)務(wù)設(shè)計(jì)上天生支持微服務(wù)架構(gòu)。必要時(shí)再引入CQRS方案解決跨上下文查詢的問題质欲。
  • DDD雖好也不是銀彈树埠。軟件設(shè)計(jì)是一種玄學(xué),無法簡單的判斷對錯(cuò)嘶伟,很多時(shí)候需要具體場景具體分析怎憋,達(dá)到業(yè)務(wù)抽象與性能的平衡。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末九昧,一起剝皮案震驚了整個(gè)濱河市绊袋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铸鹰,老刑警劉巖癌别,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蹋笼,居然都是意外死亡展姐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門姓建,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诞仓,“玉大人,你說我怎么就攤上這事速兔∈茫” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵涣狗,是天一觀的道長谍婉。 經(jīng)常有香客問我,道長镀钓,這世上最難降的妖魔是什么穗熬? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮丁溅,結(jié)果婚禮上唤蔗,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好妓柜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布箱季。 她就那樣靜靜地躺著,像睡著了一般棍掐。 火紅的嫁衣襯著肌膚如雪藏雏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天作煌,我揣著相機(jī)與錄音掘殴,去河邊找鬼。 笑死粟誓,一個(gè)胖子當(dāng)著我的面吹牛奏寨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播努酸,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼服爷,長吁一口氣:“原來是場噩夢啊……” “哼杜恰!你這毒婦竟也來了获诈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤心褐,失蹤者是張志新(化名)和其女友劉穎舔涎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逗爹,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亡嫌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掘而。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挟冠。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖袍睡,靈堂內(nèi)的尸體忽然破棺而出知染,到底是詐尸還是另有隱情,我是刑警寧澤斑胜,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布控淡,位于F島的核電站,受9級特大地震影響止潘,放射性物質(zhì)發(fā)生泄漏掺炭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一凭戴、第九天 我趴在偏房一處隱蔽的房頂上張望涧狮。 院中可真熱鬧,春花似錦、人聲如沸者冤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽譬嚣。三九已至钢颂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拜银,已是汗流浹背殊鞭。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尼桶,地道東北人操灿。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像泵督,于是被迫代替她去往敵國和親趾盐。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

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