1.引言
聚合,最初是UML類圖中的概念,表示一種強(qiáng)的關(guān)聯(lián)關(guān)系,是一種整體與部分的關(guān)系,且部分能夠離開整體而獨(dú)立存在,如車和輪胎。
在DDD中,聚合也可以用來(lái)表示整體與部分的關(guān)系,但不再?gòu)?qiáng)調(diào)部分與整體的獨(dú)立性。聚合是將相關(guān)聯(lián)的領(lǐng)域?qū)ο筮M(jìn)行顯示分組,來(lái)表達(dá)整體的概念(也可以是單一的領(lǐng)域?qū)ο螅?。比如將表示訂單與訂單項(xiàng)的領(lǐng)域?qū)ο筮M(jìn)行組合,來(lái)表達(dá)領(lǐng)域中訂單這個(gè)整體概念。
我們知道,領(lǐng)域模型是由一系列反映問(wèn)題域概念的領(lǐng)域?qū)ο螅▽?shí)體和值對(duì)像)組成,聚合正是應(yīng)用在領(lǐng)域?qū)ο笾?。如果要正確應(yīng)用聚合,我們首先得理清領(lǐng)域?qū)ο箝g的關(guān)聯(lián)關(guān)系。
2. 梳理關(guān)聯(lián)關(guān)系
在設(shè)計(jì)領(lǐng)域模型的初期,我們習(xí)慣專注于領(lǐng)域中的實(shí)體和值對(duì)象,而忽略領(lǐng)域?qū)ο笾g的關(guān)聯(lián)關(guān)系,以至于我們會(huì)基于現(xiàn)實(shí)業(yè)務(wù)場(chǎng)景或數(shù)據(jù)模型來(lái)建立關(guān)聯(lián)關(guān)系。這樣就會(huì)引入大量不必要的關(guān)聯(lián),比如下圖:
然而圖中的關(guān)聯(lián)關(guān)系都是必要的嗎?我想未必。這樣的關(guān)聯(lián)關(guān)系,加大了實(shí)現(xiàn)領(lǐng)域模型的技術(shù)難度。
當(dāng)我們建立對(duì)象的關(guān)聯(lián)關(guān)系時(shí),思考以下問(wèn)題:
這個(gè)關(guān)聯(lián)關(guān)系的作用時(shí)什么?
誰(shuí)需要這個(gè)關(guān)聯(lián)關(guān)系去發(fā)揮作用?
而如何簡(jiǎn)化關(guān)聯(lián)呢?
基于
網(wǎng)友評(píng)論