gpt4 book ai didi

entity-framework - 领域驱动设计和 Entity Framework 中的实体是否应该相同?

转载 作者:行者123 更新时间:2023-12-04 00:01:41 25 4
gpt4 key购买 nike

我第一次开始使用 Entity Framework Code First 并且对我们围绕域而不是围绕关系数据库表(这是我多年来一直工作的方式)构建的新应用程序的方式印象深刻。

因此,我们在 C# 中构建实体,每次执行新迁移时都会反射(reflect)在数据库中。

我的问题是:这些相同的实体(即在设计时考虑到 Entity Framework )是否应该与域驱动设计中的实体(即代表域的核心)扮演相同的角色?

最佳答案

对象关系映射和领域驱动设计是两个正交的关注点。

ORM

ORM 只是在这里弥合驻留在数据库中的关系数据模型和对象模型(任何对象模型)之间的差距。

EF 定义的实体具体表示您希望将关系模型的某些子部分映射到(和从)的任何对象。事实证明,EF 的创建者希望通过命名实体来赋予这些实体以商业内涵,但最终没有什么能强制您这样做。您可以将其映射到查看模型以解决所有问题。

国内长途

从 DDD 的角度来看,没有“考虑到 EF 设计的实体”这样的东西。一个 DDD 实体应该是持久性无知的,并且没有任何 ORM 的痕迹。领域层对其对象的存储方式、地点、是否或何时存储不感兴趣。

两人相遇的地方

两个正交概念相交的唯一点是您的 ORM 映射所针对的对象模型正是您的域模型。这可以通过 EF 所谓的“代码优先”(但实际上应该命名为常规 ORM),通过在位于非域层中的单独 EF 映射文件中指向您的 DDD 实体,并避免使用 EF 工件(例如数据注释)来实现直接在您的实体类中。这在使用数据库优先时是不可能的,因为交易的 DDD“纯度”部分不会得到满足。

简而言之,这两个术语是有冲突的,但它们确实应该在概念上被视为两种不同的事物。一个是域对象本身,另一个是可以指示同一组代码的指针,但它几乎可以指向任何其他内容。

关于entity-framework - 领域驱动设计和 Entity Framework 中的实体是否应该相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com