我还在努力理解DDD。假设我有一个不可变的v PresentationSlide
。因为它是不可变的,所以它可以很容易地被不同的实体共享和使用。但如果我把它映射到数据库会发生什么呢。在EntityFramework中,我可以将PresentationSlide
建模为ComplexType
,这意味着共享PresentationSlide
的属性被映射到使用它的表。这很好,但是幻灯片可能相当大,因此我浪费了空间,如果它多次使用/reference。
作为一种替代方法,我可以将PresentationSlide
映射到一个单独的表并引用它。因为它是不可变的,所以这也应该有效。但是现在,如果我修改Presentation
,我必须复制旧PresentationSlide
的内容并创建一个新实例。如果有很多的变化,我将很快有很多孤儿PresentationSlides
在我的数据库。
这不是一个问题吗?有解决办法吗?我应该实现一个自定义的定期"清理孤立的演示幻灯片"任务吗?
首先,您应该考虑域模型中PresentationSlide
的所有权和生命周期。在进行性能或存储优化时,请始终确保遵循模型语义。
-
我首先在其实体内复制每个
PresentationSlide
。这是很自然的做法,因为这也是你在你的领域模型中所做的。 -
将指标放在适当的位置,使您能够做出有关存储优化的明智决策。例如,使用复制方法,并在生产一段时间后计算由于重复而浪费的空间。
-
只有当你真的有问题时,才进行存储优化。否则你就会成为过早优化的受害者。
如果你真的需要做一个优化,我认为你提到的方法是合理的。创建一个单独的表,并定期清理不再被引用的PresentationSlide
。