我需要在许多对象中引用TimePeriod(AM、PM、NIGHT等)。例如,计划会议、实际会议。
虽然TimePeriod在数据库中有一个ID,但它绝对不是一个实体,因为它不会更改,而且所有对象的"AM"周期都是相同的。
我的困难在于知道如何从数据库中检索这个值对象。由于不同的对象可以引用它,所以它不应该是任何存储库方法的一部分,但同时它也不应该有自己的存储库,因为它不是根。
那么,您建议如何从数据库中获取这些信息?
谢谢。
更新
我赞同eulerfx的回答,因为他解释说周期仍然可以通过存储库从DB返回,尽管我真的不喜欢为多个全局值对象设置多个小存储库的想法。这个区域对我来说仍然有点灰色。
由于TimePeriod
是一个值对象,当其他对象引用它时,它们引用的是值本身,而不是ID。使时间段对象不可变,这样一旦对象引用时间段,它就知道它不会更改。时间段值可以存储在数据库表中,然后表记录具有ID,但是这些ID不需要在代码中表示。例如,如果您希望提供一个显示可用时间段列表的UI,则可以有一个用于检索时间段的简单存储库。存储库并不总是必须只返回聚合。如果时间段本质上是高度静态的,那么您可以考虑在内存中缓存,或者甚至拥有一个具有所有可用时间段的静态类。
虽然TimePeriod在数据库中有一个ID,但它绝对不是一个实体,因为它不会更改。
只要一个对象有一个定义明确的生命周期,即使它的内容没有改变,它也可以是一个实体。要问的问题是"时段会被动态创建和删除吗?"
-
是吗?那么TimePeriod应该是一个有自己存储库的实体。这是埃里克·埃文斯在他的DDD书中描述的知识水平的一个例子。
-
没有?那么您就不需要数据库,只需静态地定义TimePeriods即可。