【发布时间】:2015-06-06 23:25:30
【问题描述】:
我正在阅读 Eric Evans DDD 的一本书。 我发现了一个矛盾。
关于聚合的章节书:
选择一个 ENTITY 作为每个 AGGREGATE 的根,并控制所有 通过root访问边界内的对象。
关于存储库的章节书:
持久对象的子集必须可以通过 基于对象属性的搜索。根需要这种访问权限 不方便通过遍历到达的聚合体。他们是 通常是实体,有时是具有复杂内部的价值对象 结构,有时是枚举值。提供访问其他 对象混淆了重要的区别。
仅为实际需要的 AGGREGATE 根提供存储库 直接访问。
可以得出聚合的根可以是:
- 实体
- 值对象
- 枚举值
没错,我什么都明白了吗?
或许是对的:
仅为
提供存储库- 聚合根
- 值对象
- 枚举值 ?
什么是枚举值(需要自己的存储库!)?
【问题讨论】:
-
聚合的根始终是一个实体。此外,您只为聚合根提供存储库。值对象和枚举没有生命周期,需要通过全局唯一标识定位。
-
但是对于全局访问值对象和枚举需要它们自己的存储库。不是吗?
-
值对象由它们的属性而不是全局 id 来标识。根据有界上下文,值对象可能是另一个 BC 中的聚合。此外,vaughn vernon 调用枚举/查找数据标准类型,可以简单地从数据源加载。
标签: domain-driven-design ddd-repositories