1.引言
聚合,最初是UML類圖中的概念,表示一種強(qiáng)的關(guān)聯(lián)關(guān)系,是一種整體與部分的關(guān)系,且部分能夠離開整體而獨(dú)立存在,如車和輪胎。
在DDD中,聚合也可以用來表示整體與部分的關(guān)系,但不再強(qiáng)調(diào)部分與整體的獨(dú)立性。聚合是將相關(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ū)ο螅▽?shí)體和值對像)組成,聚合正是應(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è)計領(lǐng)域模型的初期,我們習(xí)慣專注于領(lǐng)域中的實(shí)體和值對象,而忽略領(lǐng)域?qū)ο笾g的關(guān)聯(lián)關(guān)系,以至于我們會基于現(xiàn)實(shí)業(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)系,加大了實(shí)現(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)呢?
基于
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26