2009-04-07 101 views
1

據我所知,所有的DDD實體都應該有一個ID。所以我的問題是在一個主要的詳細關係中,比如一個產品和一個ProductDetail,ProductDetail是否應該具有產品的任何知識?是否需要ProductDetail類中的ProductID屬性?在數據庫中,這當然是正常的,因爲它是鏈接兩個對象的唯一方式,但這是DDD中的最佳實踐嗎?我使用Linq2Sql作爲ORM映射器,所以這是給定的,但我認爲這不是正確的方法。任何人在這方面都有一些智慧的話語?DDD,主詳細關係中的相關實體

回答

1

外鍵是關係數據模型的工件。對象模型使用容器的概念進行操作。所以,訂單包含訂單行的集合。訂單行包含產品等。

+0

這與域驅動設計有什麼關係? – jlembke 2009-05-07 21:16:26

+1

ProductDetails類中的外鍵ProductId與DDD無關 - 它是關係數據模型的工件。這是我的觀點。 – Prankster 2009-05-08 15:34:46

5

最終用戶將如何檢索ProductDetail?如果答案是他們可能會從產品導航到產品,那麼ProductDetail只是Product的一個屬性,或者是產品屬性ProductDetails集合的一部分。

因此,在面向對象的代碼中,ProductDetail對象不需要引用父Product。

現在在您的數據庫中,您可能會有一個帶有Id列的Product的主表。然後,您有一個ProductDetail的子表,它具有與其相關的產品的Id的外鍵。

這是非常重要要記住,域驅動設計原則僅適用於您的OO代碼。關係數據庫和關係數據建模完全不同。