gpt4 book ai didi

entity-framework-4 - Entity Framework 4 和 ddd 中的 EAV

转载 作者:行者123 更新时间:2023-12-04 07:56:52 24 4
gpt4 key购买 nike

我的数据库中的一些表是使用 EAV 概念设计的。
然后我使用自动生成的实体,并将 ORM Entity Framework 的“静态”表(而不是“EAV”表)表示为 DDD 对象。

  • 如何使用 Entity Framework 在对象模型中使用我的“EAV”实体(而不是像数据库那样的关系)?

  • 例如,
    在数据库中,我有静态表 Report 和 EAV 表,它们帮助我存储 ReportProperty for Report。
    在域模型中,我想要这样的报告:
    Report
    {
    ICollection<ReportProperty> ReportProperties{get;set;}
    }

    我可以使用由 Entity Framework 和部分部分生成的报告实体
    在 getter 中实现一些逻辑,用于从我的 EAV 表中检索数据以填充 Collection ReportProperies。然后它引出了下一个问题。
  • 如果我决定使用 NHibernate 而不是 Entity Framework ,我该怎么办,因为我不能使用我已经使用 Entity Framework 实现的部分部分?

  • 如果我将使用可用于 Entity Framework 或 NHibernate 的 DDD 对象,这对我来说几乎是不可能的,因为我需要在我的 DAO 中的每个过程中调用映射过程。

    最佳答案

    EAV是数据访问层的概念,而DDD是业务逻辑层的概念。像 Entity Framework 或 NHibernate 这样的 ORM 诱使我们将这两个层混合在一起,但在具有复杂逻辑的复杂项目中(即需要 DDD 的地方),这种情况永远不会发生。所以把你的 Dal 和 Bll 分开。为您的 DDD 对象使用手工制作的类,并为 Entity Framework 使用自动生成的(或代码优先)类,并在它们之间提供一个映射层。那么 EAV 将只是你的 Dal 的一个实现细节。如果您切换到 NHibernate,您的 Bll 和 DDD 类也不必更改。只是你的映射层会。顺便说一下,使用依赖倒置。让你的 Dal 依赖你 Bll 而不是相反。如果您使映射层与 Entity Framework 部件在物理上分离,则在程序集级别使用中介者模式(这意味着您的映射层取决于您的 Bll 和 Dal,而不是其他任何方式)。

    关于entity-framework-4 - Entity Framework 4 和 ddd 中的 EAV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4497299/

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