[答疑]《领域驱动设计》里的这个不变式是不是也是错的

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集

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<c.minlength) <="" p="">

context *** inv ***:

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

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值