2011-12-20 331 views
5

我有兩個引用另一個聚合根的聚合根(首先通過第二個聚合根的身份引用第二個聚合根)。如何刪除在DDD中處理的聚合根?

從我的應用程序層(通過MVC asp.net)的命令現在刪除我的第二個聚合根。

在刪除根目錄的時候,我是否會發送一個域事件,告訴第一個聚合根目錄爲「NULL」對現在不存在的第二個聚合目錄的引用?

JD

回答

5

你正在以錯誤的方式前進。從您面臨的技術問題退後一步。首先我懷疑你的無處不在的語言中有「刪除」這樣的東西。最有可能的人會稱之爲「檔案」,「無序」,「刪除」,「缺貨」......一些術語表示特定的聚合物處於其生命週期的末尾。當領域專家談論這樣的事情時,這應該成爲一個觸發器,讓你按照以下的方式向他們提出一個問題:「如果你停止了某個產品,那麼這對那個特定產品的促銷活動有什麼影響?」。關聯到您的問題:促銷是對產品聚合進行引用的聚合。所以它非常成爲一個商業問題而不是技術問題。大多數情況下,商務人士已經有了一個可以防止此技術問題首先發生的流程(例如,您不能停止在促銷中使用的產品)。我希望現在清楚,給你一個通用答案不是一種選擇。

+0

謝謝你的回覆。是的,從技術角度來看,我一直在看太多。好的,在這種情況下,我們有一個視頻文件存儲和一個文件可以刪除。用戶實際上刪除了現在由我的第二個聚合引用的視頻文件。在與業務分析師交談時,他的回答是,我應該將其記錄在事件文件中,並將其從記錄器服務中刪除。當記錄器服務運行時,它不會失敗,並在那個時候處理。所以在我的情況下,我必須在第二個聚合中「空」它。什麼是正確的方法來做到這一點? – 2011-12-22 16:30:33

+0

關心分享更多細節? – 2011-12-25 19:55:01

+0

因此,基本上用戶可以刪除視頻,這意味着他們被從我們的應用程序中刪除。我沒有其他方法可以把它定義爲「生命週期的終結」。我曾問過,如果我們能夠阻止視頻在其他地方使用(在另一個聚合中),但答覆是不重要的,我們應該允許刪除(即我們有1000個視頻,並試圖找出誰正在使用它們(即聚合)工作太多,對用戶而言並不重要)。 – 2011-12-30 19:21:48