DDD中的聚合根

??最近在看一本書碌燕,看到了AGGREGATE(聚合)恒水,AGGREGATE root(聚合根)咒劲。下面解釋下這兩個(gè)的意思顷蟆。
??在具有復(fù)雜關(guān)聯(lián)的模型中诫隅,要想保證對(duì)象更改的一致性是很困難的。不僅互不關(guān)聯(lián)的對(duì)象需要遵守一些固定規(guī)則帐偎,而且緊密關(guān)聯(lián)的各組對(duì)象也要遵守一些固定規(guī)則逐纬。然而,過于謹(jǐn)慎的鎖定機(jī)制又會(huì)導(dǎo)致多個(gè)用戶之間毫無意義地互相干擾削樊,從而使系統(tǒng)不可用[1]豁生。
??借用書上的例子打個(gè)比方,汽車漫贞。汽車由發(fā)動(dòng)機(jī)沛硅、車輪、引擎等組成绕辖。那么我們?cè)趯?shí)際開車等場景中摇肌,人去開車,我們?cè)趺磥斫⑦@個(gè)模型仪际。這個(gè)時(shí)候就用到來一個(gè)聚合的schema围小。也就是說我們需要用一個(gè)抽象來封裝模型中的引用。 就是這個(gè)一組相關(guān)對(duì)象的集合树碱,我們把他稱為數(shù)據(jù)修改的單元肯适。
??每個(gè)AGGREGATE都有一個(gè)根(root)和一個(gè)邊界(boundary)。邊界定義了AGGREGATE的內(nèi)部都有什么成榜。根則是AGGREGATE所包含的一個(gè)特定ENTITY框舔。對(duì)AGGREGATE而言,外部對(duì)象只可以引用根赎婚,而邊界內(nèi)部的對(duì)象之間則可以互相引用刘绣。除根以外的其他ENTITY都有本地標(biāo)識(shí),但這些標(biāo)識(shí)只在AGGREGATE內(nèi)部才需要加以區(qū)別挣输,因?yàn)橥獠繉?duì)象除了根ENTITY之外看不到其他對(duì)象纬凤。
??汽車是一個(gè)具有全局標(biāo)識(shí)的ENTITY:我們需要將這部汽車與世界上所有“其他汽車區(qū)分開(即使是一些非常相似的汽車)。我們可以使用車輛識(shí)別號(hào)來進(jìn)行區(qū)分撩嚼,車輛識(shí)別號(hào)是為每輛新汽車分配的唯一標(biāo)識(shí)符停士。我們可能想通過4個(gè)輪子的位臵跟蹤輪胎的轉(zhuǎn)動(dòng)歷史。我們可能想知道每個(gè)輪胎的里程數(shù)和磨損度完丽。要想知道哪個(gè)輪胎在哪兒恋技,必須將輪胎標(biāo)識(shí)為ENTITY。當(dāng)脫離這輛車的上下文后逻族,我們很可能就不再關(guān)心這些輪胎的標(biāo)識(shí)了蜻底。如果更換了輪胎并將舊輪胎送到回收廠,那么軟件將不再需要跟蹤它們瓷耙,它們會(huì)成為一堆廢舊輪胎中的一部分朱躺。沒有人會(huì)關(guān)心它們的轉(zhuǎn)動(dòng)歷史。更重要的是搁痛,即使輪胎被安在汽車上长搀,也不會(huì)有人通過系統(tǒng)查詢特定的輪胎,然后看看這個(gè)輪胎在哪輛汽車上鸡典。人們只會(huì)在數(shù)據(jù)庫中查找汽車源请,然后臨時(shí)查看一下這部汽車的輪胎情況。因此彻况,汽車是AGGREGATE的根ENTITY谁尸,而輪胎處于這個(gè)AGGREGATE的邊界之內(nèi)。另一方面纽甘,發(fā)動(dòng)機(jī)組上面都刻有序列號(hào)良蛮,而且有時(shí)是獨(dú)立于汽車被跟蹤的。在一些應(yīng)用程序中悍赢,發(fā)動(dòng)機(jī)可以是自己的AGGREGATE的根决瞳。
??通俗異議的理解,就是我們?cè)谠O(shè)計(jì)模型的時(shí)候左权,肯定是引用汽車這個(gè)entity皮胡。而非引用車輪和引擎等,所以car就是一個(gè)聚合根的概念赏迟。而和car相關(guān)的組件屡贺,組成了一個(gè)聚合的概念。

圖解聚合和聚合根

[1]: [美] 埃里克 埃文斯(Eric Evans). “領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) 軟件核心復(fù)雜性應(yīng)對(duì)之道 修訂版.”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锌杀,一起剝皮案震驚了整個(gè)濱河市甩栈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌糕再,老刑警劉巖谤职,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亿鲜,居然都是意外死亡允蜈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蒿柳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饶套,“玉大人,你說我怎么就攤上這事垒探〖寺” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵圾叼,是天一觀的道長蛤克。 經(jīng)常有香客問我捺癞,道長,這世上最難降的妖魔是什么构挤? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任髓介,我火速辦了婚禮,結(jié)果婚禮上筋现,老公的妹妹穿的比我還像新娘唐础。我一直安慰自己,他們只是感情好矾飞,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布一膨。 她就那樣靜靜地躺著,像睡著了一般洒沦。 火紅的嫁衣襯著肌膚如雪豹绪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天申眼,我揣著相機(jī)與錄音森篷,去河邊找鬼。 笑死豺型,一個(gè)胖子當(dāng)著我的面吹牛仲智,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姻氨,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼钓辆,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了肴焊?” 一聲冷哼從身側(cè)響起前联,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娶眷,沒想到半個(gè)月后似嗤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡届宠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年烁落,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豌注。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伤塌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轧铁,到底是詐尸還是另有隱情每聪,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站药薯,受9級(jí)特大地震影響绑洛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜童本,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一真屯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巾陕,春花似錦讨跟、人聲如沸纪他。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茶袒。三九已至梯刚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間薪寓,已是汗流浹背亡资。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留向叉,地道東北人锥腻。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像母谎,于是被迫代替她去往敵國和親瘦黑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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