2010-09-07 52 views
3

雖然我一直在處理領域驅動設計(DDD)相當長一段時間,但我對實體框架(EF)相對陌生,並且在Visual Studio中使用實體框架設計器時出現了一個令我想到的問題在EF中應該如何表示/模擬聚合體。如何使用實體框架爲集合建模?

遵循DDD最佳實踐,實體應僅引用同一聚合中的其他實體(或值對象),並且對其他實體的引用僅限於聚合的根實體(聚合根)。但是,我沒有看到EF中存在任何這些概念(即,所有實體都被視爲相同,因此對實體之間的引用沒有任何限制)。

因此,我問:我是否錯過了EF中的某些內容,或者它對於聚合,聚合根和實體之間的引用完全不可知?如果後者是這種情況,那麼在使用Entity Framework時如何對Aggregate進行建模?

回答

2

我認爲DDD是其他抽象層次,所以我的答案是默認情況下沒有EF不遵循這些實踐。您需要根據DDD爲您的實體和存儲庫建模。您將使用存儲庫構建帶有與當前聚合根相關的已加載相關實體的聚合根,並且您將使用域服務來處理不同的存儲庫。

+0

這就是我一直在懷疑,感謝確認! – angelwithagun 2010-09-08 08:00:31

1

我只是想糾正一個小的(但很重要的細節):

幽州「的實體,應只引用同一集合中的其他實體(或值對象)」。

當然,這可能有一些爭論,但它比至少有一個DDD推薦的資源更嚴格:「聚合中的對象應該被允許保存 引用其他聚合的根。」 (由Avram & Marinescu提供的「Domain-Driven Design Quick」)。

最好的問候,西蒙

+0

你是完全正確的,抱歉不清楚這件事。 – angelwithagun 2010-11-09 15:10:19

+0

問題是,你如何保證實體框架不會更新對其他聚合根的引用(到達它們)? EF不應該在同一個事務中觸及2個聚合中的實體。 – SuperJMN 2014-10-15 21:23:15