我需要在许多对象中引用TimePeriod(AM,PM,NIGHT等)。例如。 ScheduledMeeting,ActualMeeting。
虽然TimePeriod在数据库中有ID,但它绝对不是实体,因为它不会改变,并且所有对象的'AM'周期都是相同的。
我的困难在于知道如何从数据库中检索此值对象。由于不同的对象可以引用它,它不应该是它们的任何存储库方法的一部分,但同时它不应该真正拥有它自己的存储库,因为它不是根。
那么您如何建议从数据库中提取此内容?
感谢。
更新
我已经找到了eulerfx的答案,因为他已经解释过,这些时期仍然可以从数据库通过存储库返回,尽管我不喜欢你想为多个全局值对象设置多个小存储库的想法。这个区域对我来说仍然有点灰色。
答案 0 :(得分:1)
由于TimePeriod
是一个值对象,当其他对象引用它时,它们引用的是值本身而不是ID。使时间段对象不可变,以便一旦对象引用一个时间段,它就知道它不会改变。时间段值可以存储在数据库表中,然后表记录具有ID,但是不需要在代码中表示。如果您希望提供显示可用时间段列表的UI,则可以使用简单的存储库来检索时间段。存储库始终不必仅返回聚合。如果时间段本质上是高度静态的,那么您可以考虑在内存中缓存,甚至可以考虑具有所有可用时间段的静态类。
答案 1 :(得分:1)
虽然TimePeriod在数据库中有ID,但它绝对不是实体,因为它不会改变。
只要对象具有明确定义的生命周期,即使其内容不发生变化,它也可以是实体。要问的问题是“会动态创建和删除TimePeriod吗?”
是?那么TimePeriod应该是一个拥有自己的存储库的实体。这是Eric Evans在他的DDD书中描述的knowledge level的一个例子。
没有?那么你不需要数据库,只需静态定义TimePeriods。