DDD全球价值对象

时间:2012-08-30 09:27:00

标签: domain-driven-design ddd-repositories value-objects

我需要在许多对象中引用TimePeriod(AM,PM,NIGHT等)。例如。 ScheduledMeeting,ActualMeeting。

虽然TimePeriod在数据库中有ID,但它绝对不是实体,因为它不会改变,并且所有对象的'AM'周期都是相同的。

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

那么您如何建议从数据库中提取此内容?

感谢。

更新

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

  

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

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

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

  • 没有?那么你不需要数据库,只需静态定义TimePeriods。