2017-02-21 122 views
1

我最近學習了DDD,我們用它來封裝創建,更新,刪除到存儲庫中以將更改保存到數據庫中。如何設計保存DDD中聚合根的字段

使用ORM工具,我們可以忽略持久性的細節,通常庫的參數是一個聚合根對象,並且ORM執行持久性的轉換(例如,如果僅存在一個域一個變化)。

但是,如果沒有ORM,只有聚合根對象的一個​​字段被更改並將其保存到數據庫,如何設計這個存儲庫?支持保存該字段的方法?有一種稱爲更新的方法來保存所有屬性,但使用它會導致性能問題。

回答

0

通常您需要另一個存儲庫。它如何實施取決於你。 您可以編寫代碼,以便在更改時只保存/更新單個字段。

如果你想更新單個字段,他們改變一種方法來做到這一點是使用Observer在對象中「觀察突變」。這種方法可以有兩種「操作模式」

  • 特設:當一個字段得到更新時,馬上堅持這個字段的值。
  • 集合更新:收集所有更新字段的信息(僅更新它們而不是數據)。然後在時間到來時全部更新它們

此方法在大型系統中可能會有其他性能影響。你必須看看它是否適合你。

另一種選擇是讓您的ORM在更新時通過比較識別更改的字段。這又會有其自身的性能影響,因爲您必須再次獲取DB對象(聚合)並將其與運行時更改進行比較。

實際上,如何實現這些功能在很大程度上取決於您使用的語言及其實用程序。性能問題也很大程度上取決於語言/運行時平臺/第三方軟件以及其他許多事情。

1

要堅持更改,只需要知道發生了什麼變化,顯然。因爲它們發生

  1. 跟蹤更改:有兩種常見的方法來實現這一目標。當實體明確參與到變更追蹤機制中時,這個策略更容易實現。例如,對於Event Sourcing,彙總根中的record uncommitted change event(s)將處於其處理的所有命令的集合中。

  2. 髒檢查:將新狀態與舊狀態進行比較。請注意,可能會緩存舊狀態以進行性能優化。

+0

@RonSmith你忘了你的問題嗎? – plalx