2015-09-10 78 views
2

我仍然試圖理解DDD。假設我有一個不可變的VO PresentationSlide。因爲它是不可變的,所以它很容易被不同的實體共享和使用。 但是如果我嘗試將其映射到數據庫會發生什麼情況。在EntityFramework中,我可以將PresentationSlide建模爲ComplexType,這意味着將共享的PresentationSlide的屬性映射到使用它的表。這很好,但幻燈片可能會很大,因此如果它多次使用/引用,我正在浪費空間。刪除孤立的共享ValueObjects?

作爲一種替代方法,我可以將PresentationSlide映射到單獨的表並引用它。因爲它是不可變的,所以這也應該起作用。但現在,如果我修改了Presentation,我必須複製舊的PresentationSlide的內容並創建一個新實例。如果有很多變化,我很快會在我的數據庫中有很多孤兒PresentationSlides

這不是問題嗎?有解決方案嗎? 我是否應該實施自定義期刊「Cleanup孤兒PresentationSlides」任務?

+0

您可以隨時根據事件進行清理,例如'PresentationChanged',或者您可以執行定期清理。儘管如此,有時使用VO可能過於昂貴,儘管沒有真正需要身份。我覺得'PresentationSlide'是可變的。您多長時間一次在演示文稿之間共享「PresentationSlide」,甚至在同一張幻燈片中重複使用同一張幻燈片? – plalx

+0

有一些我不明白。 **共享**'PresentationSlide'意味着當用戶創建一個新的'演示文稿'時,他可以選擇將現有的'PresentationSlide'附加到'演示文稿'而不是添加一個新的演示文稿。但是,您必須爲未來的新/修改的「演示文稿」保留孤立的'PresentationSlides'。 – jlvaquero

回答

0

首先,您應該考慮域模型中PresentationSlide的所有權和生命週期。請務必在執行性能或存儲優化時遵循模型語義。

  • 我會從其實體中複製每個PresentationSlide開始。這只是自然而然的做法,因爲這也是您在域模型中所做的。

  • 將指標置於恰當的位置,使您能夠對存儲優化做出明智的決定。例如。使用重複方法並計算在生產一段時間後由於重複而浪費的空間。

  • 只有確實存在問題,才能進行存儲優化。否則,你已成爲Premature Optimization的受害者。

如果您確實需要優化,我認爲您提到的方法是合理的。創建一個單獨的表格,並定期清理不再被引用的PresentationSlide