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

為了的更好的理解DDD,我們先簡(jiǎn)單介紹下Transaction Script

Transaction Script模式遵循的是過程式開發(fā)風(fēng)格而不是面向?qū)ο蠓椒üMǔ#瑸槊總€(gè)業(yè)務(wù)事務(wù)創(chuàng)建一個(gè)單獨(dú)的方法,并將它們組合起來放入某種靜態(tài)管理程序或服務(wù)類抄邀。每個(gè)過程都包含了完成業(yè)務(wù)事務(wù)所需的所有業(yè)務(wù)邏輯阴孟,包括工作流晌纫、業(yè)務(wù)規(guī)則和數(shù)據(jù)庫持久化驗(yàn)證檢查。

由于Transaction Script的特征永丝,分層的一般架構(gòu)


123.jpeg

Transaction Script模式的一個(gè)優(yōu)勢(shì)是它易于理解锹漱,很快就可以讓團(tuán)隊(duì)新成員上手而不需要具有該模式的預(yù)備知識(shí)。當(dāng)出現(xiàn)新需求時(shí)慕嚷,很容易向該類中添加更多方法哥牍,而不用擔(dān)心影響或破壞現(xiàn)有功能。
Transaction Script模式非常適于那些邏輯中只包含很少或不包含可能增長(zhǎng)的功能集合的小型應(yīng)用程序喝检,以及有不熟悉面向?qū)ο缶幊谈拍畹某跫?jí)開發(fā)者的團(tuán)隊(duì)

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

1.1.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的核心

軟件的核心是為用戶解決領(lǐng)域相關(guān)問題的能力嗅辣。

1.2.分層

456.jpeg

1.3.核心元素

  • entity

一些對(duì)象主要不是由它們的屬性定義的,而是通過標(biāo)志進(jìn)行區(qū)分的挠说。比如一個(gè)人澡谭,不是通過身高、體重损俭、膚色等屬性定義的蛙奖,一般我們使用身份證來標(biāo)識(shí)。

  • value object

很多對(duì)象沒有概念上的標(biāo)識(shí)撩炊,它們表述了一個(gè)事物的某種特征外永。比如顏色、溫度拧咳、長(zhǎng)短等伯顶。

  • repository

我們可以通過對(duì)象之間的關(guān)聯(lián)來找到對(duì)象,但當(dāng)它處于生命周期的中間時(shí)骆膝,必須要有一個(gè)起點(diǎn)祭衩,以便從這個(gè)起點(diǎn)遍歷到一個(gè)entity或value object。比如現(xiàn)在有訂單id(123)阅签,需要構(gòu)建Order aggregate對(duì)象時(shí)掐暮,我們就可以通過repository來完成這個(gè)過程。

  • service

有時(shí)政钟,對(duì)象不是一個(gè)事物路克,而是某種操作樟结。比如購買商品時(shí)的購買行為等。

  • aggregate

aggregate就是一組相關(guān)對(duì)象的集合精算,我們把它作為數(shù)據(jù)修改的單元瓢宦。每個(gè)aggregate都有一個(gè)根(root)和一個(gè)邊界(boundary)。比如在下面的圖片中灰羽,一共有四個(gè)aggregate驮履,分別是Customer、Order廉嚼、Product玫镐、Product Categories。
[圖片上傳失敗...(image-13fbb0-1540213534191)]

  • factory

在創(chuàng)建整個(gè)aggregate時(shí)怠噪,創(chuàng)建工作可能變得很復(fù)雜恐似,比如上圖中Order aggregate的創(chuàng)建。對(duì)于這類的創(chuàng)建動(dòng)作舰绘,我們可以使用Factory模型蹂喻。

1.3.1.factory與repository的區(qū)別

雖然factory與repository都是為了創(chuàng)建aggregate對(duì)象葱椭,但是兩者的職責(zé)是有著非常明顯的劃分的捂寿,其中factory負(fù)責(zé)創(chuàng)建一個(gè)新的aggregate對(duì)象,而repository則是從已有的存儲(chǔ)系統(tǒng)中重建aggregate對(duì)象孵运。

1.3.2.是不是所有的entity都需要引入repository秦陋?

在使用ddd架構(gòu)時(shí),我們?cè)谝雛epository時(shí)治笨,非常容易犯的一個(gè)錯(cuò)誤驳概,就是為每個(gè)entity都引入repository。為什么會(huì)這么做呢旷赖?

因?yàn)樵赥ransaction Script中顺又,通常一個(gè)表,一個(gè)dao等孵;所以我們?cè)赿dd中使用repository時(shí)稚照,自然而然的為每個(gè)entity引入一個(gè)repository。

1.4.DDD不僅僅是分層

在使用ddd時(shí)俯萌,我們?nèi)菀紫萑胍粋€(gè)誤區(qū)果录,就是根據(jù)ddd引入了大量的分層代碼。雖然我們的代碼是根據(jù)ddd的分層方式去組織咐熙,但是實(shí)際的業(yè)務(wù)邏輯卻以及使用Transaction Script的方式在處理弱恒。是什么原因?qū)е聦?dǎo)致的呢?

  • 1.對(duì)ddd理解不夠透徹
  • 2.沒有抓住核心的業(yè)務(wù)
  • 3.Transaction Script的影響

在上面的幾個(gè)因素中棋恼,只能通過不斷的實(shí)踐ddd項(xiàng)目返弹,才能夠獲得深入的了解锈玉,并無什么銀彈。

1.5.充血模型與貧血模型的區(qū)別

待補(bǔ)充...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末义起,一起剝皮案震驚了整個(gè)濱河市嘲玫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌并扇,老刑警劉巖去团,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異穷蛹,居然都是意外死亡土陪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門肴熏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鬼雀,“玉大人,你說我怎么就攤上這事蛙吏≡戳ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵鸦做,是天一觀的道長(zhǎng)励烦。 經(jīng)常有香客問我,道長(zhǎng)泼诱,這世上最難降的妖魔是什么坛掠? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮治筒,結(jié)果婚禮上屉栓,老公的妹妹穿的比我還像新娘。我一直安慰自己耸袜,他們只是感情好友多,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堤框,像睡著了一般域滥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胰锌,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天骗绕,我揣著相機(jī)與錄音,去河邊找鬼资昧。 笑死酬土,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的格带。 我是一名探鬼主播撤缴,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼刹枉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了屈呕?” 一聲冷哼從身側(cè)響起微宝,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虎眨,沒想到半個(gè)月后蟋软,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗽桩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年岳守,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碌冶。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡湿痢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扑庞,到底是詐尸還是另有隱情譬重,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布罐氨,位于F島的核電站臀规,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏岂昭。R本人自食惡果不足惜以现,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一狠怨、第九天 我趴在偏房一處隱蔽的房頂上張望约啊。 院中可真熱鬧,春花似錦佣赖、人聲如沸恰矩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽外傅。三九已至,卻和暖如春俩檬,著一層夾襖步出監(jiān)牢的瞬間萎胰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工棚辽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留技竟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓屈藐,卻偏偏與公主長(zhǎng)得像榔组,于是被迫代替她去往敵國和親熙尉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359