《领域驱动设计》书里的这个不变式是不是也是错的

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 ***:

当然,此时在模型中,约束和类并没有真正关联。


weixinpanjiayu2