1

我需要在许多对象中引用 TimePeriod(AM、PM、NIGHT 等)。例如。预定会议,实际会议。

尽管 TimePeriod 在数据库中带有 ID,但它绝对不是实体,因为它不会更改,并且“AM”期间在所有对象中都是相同的。

我的困难在于知道如何从数据库中检索这个值对象。由于不同的对象可以引用它,它不应该是它们的任何存储库方法的一部分,但同时它不应该真正拥有自己的存储库,因为它不是根。

那么你会如何建议从数据库中获取它呢?

谢谢。

更新

我已经接受了 eulerfx 的回答,因为他解释说句点仍然可以通过存储库从数据库返回,尽管我不太喜欢为多个全局值对象设置多个小型存储库的想法。这个区域对我来说仍然有点灰色。

4

2 回答 2

2

由于TimePeriod是一个值对象,当其他对象引用它时,它们引用的是值本身而不是 ID。使时间段对象不可变,这样一旦对象引用了时间段,它就知道它不会改变。时间段值可以存储在数据库表中,然后表记录具有 ID,但是这些不需要在代码中表示。您可以有一个简单的存储库来检索时间段,例如,如果您希望提供一个显示可用时间段列表的 UI。存储库并不总是必须只返回聚合。如果时间段本质上是高度静态的,那么您可以考虑在内存中缓存,甚至拥有一个包含所有可用时间段的静态类。

于 2012-08-31T01:37:17.233 回答
1

虽然 TimePeriod 在数据库中有 ID,但它绝对不是实体,因为它不会改变。

只要对象具有明确定义的生命周期,即使其内容不变,它也可以是实体。要问的问题是“将动态创建和删除 TimePeriods 吗?”

  • 是的?那么 TimePeriod 应该是一个拥有自己存储库的实体。这是Eric Evans 在他的 DDD 书中描述的知识水平的一个例子。

  • 不?然后你不需要数据库,只需静态定义 TimePeriods 即可。

于 2012-08-31T05:08:52.417 回答