域模型和EF Core模型

时间:2018-03-15 12:58:57

标签: domain-driven-design entity-framework-core

查看帖子"Should Entities in Domain Driven Design and Entity Framework be the same?"时,接受的答案表明,在首先使用代码时,域实体和EF实体只能是相同的。这样实体就可以保持“纯粹”。

但是,由于这种情况:"Discussion on many-to-Many relationships (without CLR class for join table)",无法为产品实体集合创建订单实体,而无需为关联表(订单线实体)指定特殊实体。

我现在看到同事们将这些关联表纳入他们的域名实体,我觉得这是错误的,因为它暗示着要坚持持久性而不是真正的域名。在我看来,它们不再是“纯粹的”。

您是否会因为关联表实体而无法在EF Core中拥有相同的域实体?我如何在EF Core中解决这个问题?

1 个答案:

答案 0 :(得分:1)

但是在常规/经典Ordering域中,需要orderline(或订单行项目或任何您想要调用的项目),因为您需要存储数量和产品ID上的商品价格。

在大多数DDD示例中,此项目从DDD角度来看是Value object,从持久性角度来看是Entity。如果您想知道Value对象如何成为ORM实体,您应该阅读Vaughn Vernon的书Persisting Value Objects中的Implementing Domain Driven Design

但是,有些情况下,Domain模型不能与Persistence模型完全匹配100%。在这种情况下,需要将一些元信息附加到域模型以匹配持久性模型。通常,您有两种选择:

  • 您可以将元数据添加到某些外部文件,例如XML文件;
    • 它的优势在于它使域模型与持久性无关,但
    • 它的缺点是必须记住在域模型更改时更改外部文件
  • 您可以注释域模型
    • 它的优点是,通过将信息放在同一个文件中,很容易同时更改Domain模型和Persistence模型;它遵循原则:"一起变化的东西保持在一起" (共同关闭原则)
    • 它的缺点是它会污染具有基础结构问题的域模型

如果我必须选择,我倾向于选择注释域模型,但你应该自己做出决定。