Domain driven design DDD,主-明细关系中的相关实体

Domain driven design DDD,主-明细关系中的相关实体,domain-driven-design,Domain Driven Design,据我所知,所有DDD实体都应该有一个ID。所以我的问题是在主-详细关系中,比如说产品和产品详细信息,产品详细信息是否应该了解该产品?是否需要在ProductDetail类中使用ProductID属性?在数据库中,这当然是正常的,因为这是链接两个对象的唯一方法,但这是DDD中的最佳实践吗?我使用Linq2Sql作为ORM映射器,所以这是一个给定的方法,但我认为这不是正确的方法。有谁对此有一些智慧吗?外键是关系数据模型的工件。对象模型使用容器的概念进行操作。因此,订单包含订单行的集合。订单行包含产品

据我所知,所有DDD实体都应该有一个ID。所以我的问题是在主-详细关系中,比如说产品和产品详细信息,产品详细信息是否应该了解该产品?是否需要在ProductDetail类中使用ProductID属性?在数据库中,这当然是正常的,因为这是链接两个对象的唯一方法,但这是DDD中的最佳实践吗?我使用Linq2Sql作为ORM映射器,所以这是一个给定的方法,但我认为这不是正确的方法。有谁对此有一些智慧吗?

外键是关系数据模型的工件。对象模型使用容器的概念进行操作。因此,订单包含订单行的集合。订单行包含产品等。

外键是关系数据模型的工件。对象模型使用容器的概念进行操作。因此,订单包含订单行的集合。订单行包含产品等。

最终用户将如何检索产品详细信息?如果答案是他们可能会从产品导航到它,那么ProductDetail只是产品的一个属性,或者是产品属性的ProductDetails集合的一部分

因此,在面向对象的代码中,ProductDetail对象不需要引用父产品

现在在数据库中,您可能有一个Id列的产品主表。然后,您就有了ProductDetail的子表,该表具有与其相关的产品Id的外键


请记住,领域驱动的设计原则只适用于您的OO代码,这一点非常重要。关系数据库和关系数据建模是完全不同的。

最终用户将如何检索ProductDetail?如果答案是他们可能会从产品导航到它,那么ProductDetail只是产品的一个属性,或者是产品属性的ProductDetails集合的一部分

因此,在面向对象的代码中,ProductDetail对象不需要引用父产品

现在在数据库中,您可能有一个Id列的产品主表。然后,您就有了ProductDetail的子表,该表具有与其相关的产品Id的外键


请记住,领域驱动的设计原则只适用于您的OO代码,这一点非常重要。关系数据库和关系数据建模是完全不同的。

这与域驱动设计有什么关系?ProductDetails类中的外键ProductId与DDD无关-它是关系数据模型的产物。这就是我的观点。这与域驱动设计有什么关系?ProductDetails类中的外键ProductId与DDD无关-它是关系数据模型的产物。这就是我的观点。如何使用ORM将两个模型连接在一起?ORM将让您在ProductDetail类中定义外键?是否有任何ORM可以在不定义ProductId的情况下处理域模型。原始sql是唯一的方法吗?我总是滚动自己的数据访问层,而不是使用ORM。大多数好的ORM工具,如NHibernate,应该允许您在数据库中创建对子表具有外键引用的子表。如果您正确配置了ORM,您的存储库可以将父模型和子模型作为同一DDD聚合的一部分进行检索。如何使用ORM将这两个模型连接在一起?ORM将让您在ProductDetail类中定义外键?是否有任何ORM可以在不定义ProductId的情况下处理域模型。原始sql是唯一的方法吗?我总是滚动自己的数据访问层,而不是使用ORM。大多数好的ORM工具,如NHibernate,应该允许您在数据库中创建对子表具有外键引用的子表。如果正确配置ORM,则存储库可以将父级和子级作为同一DDD聚合的一部分进行检索。