DDD全局值对象



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

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

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

那么,您建议如何从数据库中获取这些信息?

谢谢。

更新

我赞同eulerfx的回答,因为他解释说周期仍然可以通过存储库从DB返回,尽管我真的不喜欢为多个全局值对象设置多个小存储库的想法。这个区域对我来说仍然有点灰色。

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

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

只要一个对象有一个定义明确的生命周期,即使它的内容没有改变,它也可以是一个实体。要问的问题是"时段会被动态创建和删除吗?"

  • 是吗?那么TimePeriod应该是一个有自己存储库的实体。这是埃里克·埃文斯在他的DDD书中描述的知识水平的一个例子。

  • 没有?那么您就不需要数据库,只需静态地定义TimePeriods即可。

相关内容

  • 没有找到相关文章

最新更新