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