Evans这样画是真不懂还是有特别的考虑?
albert 2024-5-2 10:14
您觉得Evans这样画是真不懂还是有特别的考虑?
(补注:指的是“《领域驱动设计》里的这个不变式是不是也是错的”中提到的图。)
UMLChina潘加宇
不清楚。
Eric Evans虽然在他的书中提了不变式,但除了书里的例子,我还没有阅读到他在其他地方提供更多的例子。
有意思的是,因为Eric Evans提了不变式,所以DDD圈子里就把不变式当成了新宠,写文章的时候总喜欢提那么一嘴(同理,Eric Evans没提到的内容,圈子是当作不存在的)。
遗憾的是,圈子的特点是“不学有术”和“封闭引用”,所以关于不变式的阐述都是有点搞笑的。
参见《这个不变式是不是多余》中我批评Vaughn Vernon《实现领域驱动设计》书中“不变式”的内容。
**********
如果强行猜测的话,可能一半一半吧。
Eric Evans可能想“创新”一下,表达“聚合圈住的内容”的不变式,所以把式子画在圈子内的空白处,但关于“聚合”以及“聚合根”存在的冗余和伪创新,我在《DDD话语“聚合”中的伪创新》已经阐述了。
但还有一个不好回避的细节问题:
如果用建模工具画出书中这个图上的花括号内容{sum of......},我们会怎么画?下图直接摘了英文版原书的图,以免引入中译本重描或重画带来的误会。
从我使用建模工具的经验来看,要得到上图的效果,应该是这样做的:
选中(或双击)Purchase Order和Purchase Order Line Item之间的关联线,在关联的属性框的某处填上{sum of......},当然,顺便把Purchase Order一侧设为aggregate,Purchase Order Line Item一侧的多重性设为*。
至于“关联的属性框的某处”是哪一处,就看{sum of......}的位置。
Eric Evans的图上,{sum of......}的位置在关联线的中间位置,那么应该是填在关联的名称处。
而像《这个不变式是不是多余》中提到的下面这张图,{Post必须......}的位置紧挨着Post,应该是填在关联的Post一侧的角色处。
这个细节说明,作者如果是用建模工具画的图(看图的样子,可能性较大),画图的时候确实是知道{sum of......}或{Post必须......}这样的内容是描述这根关联线,而不是描述关联两端的某个类。
也就是说,作者觉得“不变式描述关联”这个事情很正常。
**********
当然,此处作者可以这样辩解:
其实道理作者是懂的,只不过画图的时候是用纯绘图工具画的,不变式那个框框不小心摆的地方不对,造成误解了,不好意思!
你看,圈子喜欢用“敏捷”而“自由”的画图工具,不是没有理由的——不用考虑语法以及语法背后的道理,怎么画都对!
上面这两张图还可以这么辩解一下,而《你的医书是假的!》中批评的图就没法辩解了,因为已经明晃晃地把“不变式”绑定到关联线上了。