据我所知,所有DDD实体都应该有一个ID。所以,如果ProductDetail对产品有任何了解,那么我的问题在于主要的细节关系,例如Product和ProductDetail?它是否与ProductDetail类中的ProductID属性相关?在数据库中,这当然是正常的,因为它是链接两个对象的唯一方法,但这是DDD中的最佳实践吗?我使用Linq2Sql作为ORM映射器,所以这是给定的,但我认为这不是正确的方法。有人对此有一些智慧吗?
答案 0 :(得分:5)
最终用户如何检索ProductDetail?如果答案是他们可能会从Product导航到它,那么ProductDetail只是Product的属性,或者是ProductDetails集合的一部分,它是Product的属性。
因此,在面向对象的代码中,ProductDetail对象不需要引用父Product。
现在,在您的数据库中,您可能拥有带有Id列的Product主表。然后,您有一个ProductDetail的子表,它具有与其相关的产品的Id的外键。
非常重要要记住,域驱动设计原则仅适用于您的OO代码。关系数据库和关系数据建模完全不同。
答案 1 :(得分:1)
外键是关系数据模型的工件。对象模型以容器的概念运行。因此,Order包含订单行的集合。订单行包含产品等