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

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

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 12:52:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 12:52:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 12:52:02       87 阅读
  4. Python语言-面向对象

    2024-05-02 12:52:02       96 阅读

热门阅读

  1. std::filesystem使用笔记

    2024-05-02 12:52:02       37 阅读
  2. android 修改最低亮度值,不要太暗

    2024-05-02 12:52:02       33 阅读
  3. 安卓手机APP开发__媒体开发部分__立体环绕声

    2024-05-02 12:52:02       35 阅读
  4. Hive 与 MySQL 的数据库限制对比

    2024-05-02 12:52:02       33 阅读
  5. 高速收发器(GTX)文章导航

    2024-05-02 12:52:02       32 阅读
  6. google chromeDriver 地址

    2024-05-02 12:52:02       36 阅读
  7. Debian常用命令

    2024-05-02 12:52:02       33 阅读