《领域驱动设计》书里的这个不变式是不是也是错的
Seven 2024-4-26 17:01
领域驱动设计书里的这张图,我发现和您批评过的不变式很相似,是不是从根源上就是错的
(
补注:
“批评过的不变式”说的是《这个不变式是不是多余》中的图
)
UMLChina潘加宇
你的看法是正确的。
Eric Evans的这个图也是不合适的,也许国内的“DDD专家”就是看了这个图才模仿的。
Eric Evans的图有这么几个问题:
(1)把式子放在关联线上;
(2)sum of Item amounts是自然语言;
(3)amounts在图上的属性名、角色名中找不到,具体什么意思只能猜测(是quantity*price?),或者需要和相关人员“沟通”——这也许正是领域驱动设计的精髓,留下想象的空白并促进大家热火朝天“沟通”起来,不知不觉中,一天就快快乐乐地过去了!
不过,Eric Evans至少没有提供冗余的信息。
他没有像《这个不变式是不是多余》中所提到的那样,写{The PO must have at least one Item(订单必须至少有一个订单项)}。
关于不变式的知识以及聚合根为什么是伪创新,可以参见我写过的文章:
续《你的医书是假的!》
《你的医书是假的!》
《DDD话语“聚合”中的伪创新》
=====以下是扩展=====
如果觉得类添加了不变式等约束后,像下图(摘自《这个不变式是不是多余》)这样占的地方太大,怎么办呢?
做法可以是:
(1)在类图上不显示约束
EA操作:右击类图空白处,选择Properties,取消Constraint的勾选。
(2)让约束的内容在所链接的Note中显示
EA操作:添加Note,把Note链接到需要注释的类,右击链接,选择Link this Note****,选中需要显示的约束。
这样,约束可以在类的方框之外显示,但内容仍然是属于类的。
(3)在某个地方表达所有类的所有约束
例如:
context Post inv p1: !(exists c in cats: length>c.maxLength || length
context *** inv ***:
当然,此时在模型中,约束和类并没有真正关联。