Eric Evans关于聚合的隐喻错误[《软件方法》节选]

68 篇文章 2 订阅

软件方法(下)分析和设计第8章分析 之 分析类图——知识篇(20211227更新)

软件方法(下)分析和设计第9章分析 之 分析类图——案例篇(20211228更新)

8.3.3.3 DDD****话语中的“聚合”

起名和隐喻

DDD话语中也有“聚合(Aggregate)”,和之前各种面向对象方法学以及UML的“聚合(Aggregation)”有一些差别。

Eric Evans在发明新式话语时,应该是借鉴了Aggregation,但为了“创新”,改一个词:Aggregate。DDD话语中的Aggregate相当于整个聚合/组合结构,整体类被称为“聚合根(Aggregate Root)”。

如前文所言,不管是Aggregation还是Aggregate,很容易误解成“累计”或“集合”,混同于各种集合类(List、Queue、Stack……)。

其实Eric Evans应该借鉴的是之前面向对象方法学和UML中的"组合(Composition)",然后发明“Composite”和“Composite Root”。

Eric Evans在发明“Aggregate”新式话语时,应该没有意识到这一点。从他在书中用一串葡萄来隐喻“聚合”就可以看出来。

图8-117 摘自Domain-Driven Design: TacklingComplexity in the Heart of Software, Evans E. , 2003

一大串葡萄就算有一亿颗,也只是同一个类“葡萄”的对象集合。若干颗葡萄、两个煎蛋、一根油条、一杯豆浆、若干张纸巾,再加一把叉子,组成一份早餐,这个才是有意义的“组合”。

图8-118 有意义的聚合/组合

另外,Eric Evans选用这个图片,可能还搞错了另一个知识,不过这个知识不是软件开发知识,而是植物学知识。

植物学上有聚合果(Aggregate Fruit)的概念,如下图

图8-119 摘自百度百科“聚合果”词条

Eric Evans可能想到“Aggregate Fruit”这个术语,觉得葡萄是成串的,以为葡萄是“Aggregate Fruit”,于是把图片放上去了——其实葡萄是单果。

图8-120 摘自https://zhuanlan.zhihu.com/p/37538771

当然,也可能Eric Evans用这个图片的时候,并没有意识到“Aggregate Fruit”之类的概念,觉得图片差不多意思就用上了。


如果要换一个更好的隐喻,可以从1994年出版的Grady Booch书中所给的类比中挑一个。

图8-121 摘自《面向对象分析与设计(原书第2版)》,Booch G. 著;冯博琴 等译,英文原版出版于1994年

实践中的思维颠倒

……


关于聚合,以前还发过一篇文章:猴子掰玉米?比较不同版《领域驱动设计》说“不变式”和“聚合”


DDD领域驱动设计批评-文集-点击查看>>


3月17-20晚剔除“伪创新”的领域驱动设计-网络公开课


UMLChina建模竞赛题大全-题目全文+分卷自测(11套110题)


全程字幕-26套UML+Enterprise Architect/StarUML建模示范视频(202201更新)


《软件方法》书中自测题-题目全文+分卷自测(1-8章)16套111题


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值