Domain driven design 是否删除孤立的共享值对象?

Domain driven design 是否删除孤立的共享值对象?,domain-driven-design,value-objects,Domain Driven Design,Value Objects,我还在努力理解DDD。假设我有一个不可变的VOPresentationSlide。因为它是不可变的,所以很容易被不同的实体共享和使用。 但如果我尝试将其映射到数据库,会发生什么呢。在EntityFramework中,我可以将PresentationSlide建模为ComplexType,这意味着共享PresentationSlide的属性映射到使用它的表。这很好,但是幻灯片可能相当大,因此如果多次使用/引用,我会浪费空间 作为一种替代方法,我可以将一个PresentationSlide映射到一个

我还在努力理解DDD。假设我有一个不可变的VO
PresentationSlide
。因为它是不可变的,所以很容易被不同的实体共享和使用。 但如果我尝试将其映射到数据库,会发生什么呢。在EntityFramework中,我可以将
PresentationSlide
建模为
ComplexType
,这意味着共享
PresentationSlide
的属性映射到使用它的表。这很好,但是幻灯片可能相当大,因此如果多次使用/引用,我会浪费空间

作为一种替代方法,我可以将一个
PresentationSlide
映射到一个单独的表并引用它。因为它是不可变的,所以它也应该起作用。但是现在,如果我修改一个
演示文稿
,我必须复制旧的
PresentationSlide
的内容并创建一个新实例。如果有很多更改,我的数据库中很快就会有很多孤立的
PresentationSlides

这不是个问题吗?有解决办法吗?
我是否应该实施自定义定期“清理孤立的PresentationSlides”-任务?

首先,您应该考虑域模型中的
PresentationSlide的所有权和生命周期。在执行性能或存储优化时,始终确保遵循模型语义

  • 首先,我要在实体中复制每个
    PresentationSlide
    。这只是一种自然的方式,因为这也是您在域模型中所做的

  • 制定适当的指标,使您能够就存储优化做出明智的决策。例如,采用复制方法,计算在生产一段时间后由于复制而浪费的空间

  • 只有当您确实有问题时,才进行存储优化。否则你就成了暴力的受害者


如果你真的需要进行优化,我认为你提到的方法是合理的。创建一个单独的表,定期清理不再引用的
PresentationSlide
s

您可以始终基于事件进行清理,例如
PresentationChanged
,也可以执行定期清理。尽管如此,有时使用VO可能太贵了,尽管实际上不需要身份。对我来说,
PresentationSlide
是可变的,这是很自然的。您是否经常在演示文稿之间共享一张演示文稿幻灯片
,甚至在一张幻灯片中重复使用同一张幻灯片?有一点我不明白。共享
PresentationSlide
意味着当用户创建新的
演示文稿时,他可以选择将现有的
PresentationSlide
附加到
演示文稿
,而不是添加新的演示文稿。但是,您必须保留孤立的
演示幻灯片
,以便将来新建/修改
演示文稿