2013-04-18 55 views
0

吉米·尼爾森從應用DDD和模式一書中抽取的引用的對象: Order Aggregate and Product Entity刪除從另一個agregate

比方說,我想刪除產品由一些訂單行引用,通過刪除我的意思是從數據庫中,爲什麼? 也許是因爲系統運行了很長時間,用戶想清理一些舊的產品,該如何解決?
對於那些可能已經讀過這本書的另一個問題,爲什麼作者選擇不像他爲Customer實體拍攝產品的快照?

回答

0

由於訂單實際上是不可變的事件,因此從數據庫中刪除產品不應影響該產品的現有訂單。將適用的產品數據直接複製到訂單項中通常是一個好主意 - 這可能是吉米書中被稱爲「快照」的內容,但我不確定。另外,如果您使用的是關係數據庫,並且對產品ID有外鍵約束,那麼您應該避免刪除產品或刪除約束。

+0

對不完整\不準確的問題,主要問題不在於刪除過程本身,我知道外鍵約束。問題出現在Presentation中,如果一個產品實際上被刪除了,並且一個客戶正在查看他的舊訂單,那麼系統將在哪個訂單中獲取他購買的產品的詳細信息,因此最重要的問題實際上是第二個問題一,爲什麼他沒有選擇將產品數據複製到訂單行項目中,請對此和視圖問題發表評論? –

+0

我不確定他爲什麼沒有這樣做,它可能是爲了解釋的目的 - 展示實現關係的不同方式。在你的情況下,我認爲你應該將所有適用的數據複製到訂單行,以便它可以用於演示目的。無論產品是否被完全刪除,這都有好處。 – eulerfx

+1

我同意eulerfx在這裏:另一個問題可能是定價。這也隨着時間的推移而變化,因此您想要刪除的同一歷史產品可能會隨着時間的推移而有不同的價格。價格不成問題的原因是因爲它已被非規範化到'OrderLine'中,因爲價格通常保持在供應商價格表中。所以最簡單的方法是在數據層面去除高度「耦合」。 –

相關問題