.net - 使用 Entity Framework 4 的领域驱动设计

标签 .net entity-framework design-patterns architecture entity-framework-4

我已经阅读了一些讨论如何使用 EF 实体作为业务对象的帖子

Using Entity Framework entities as business objects?

但这不是使业务对象的设计依赖于数据模型吗?这是企业应用程序的正确做法吗?域和数据模型不应该是独立的,一个的变化不应该影响另一个吗?如果我选择将它们分开,那么我是否需要创建另一个层来填充来自 EF 实体的业务对象?如果我同时拥有自定义业务对象和 EF 实体,哪一个用于在层之间传输数据(包括一直到 UI)?有没有这方面的架构模式?如果有演示这些概念的示例应用程序(不仅仅是演示版本,适合在企业应用程序中使用),那将会很有用。

此链接清楚地说明了问题

http://msdn.microsoft.com/en-us/magazine/dd882510.aspx#id0420099

最佳答案

这取决于您想要/需要的松散耦合程度。

以一个 WPF/MVVM 应用程序为例,它通过 WCF 与服务对话并使用 EF 存储数据。然后,如果你一路走下去,你会得到以下内容:

在客户端:

  • 查看
  • View 模型
  • 型号

  • 客户端和服务器之间:
  • 数据传输对象

  • 在服务器上:
  • 企业实体
  • EF实体

  • 每层之间带有映射代码。这可能是大量的工作和对象之间的重复。有这么多层可能不太实用。我们尽量将它们结合起来,例如 DTO 也可以作为模型吗?

    使用分部类,您可以向 EF 类添加功能,如果重新生成模型,这些功能将不会被删除。因此,您可以将 then 用作您的业务实体。

    由于以下原因,我不会将它们用作 DTO:
  • 数据库中的更改可能会影响许多系统
  • 非 MS 客户端可能正在使用您的服务
  • 关于.net - 使用 Entity Framework 4 的领域驱动设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839549/

    相关文章:

    c# - Visual Studio 2015 在嵌套 using 语句中的行为

    .net - 如何确保处理 MongoDB 连接(DB Hanging)

    design-patterns - 阅读源代码时如何识别设计模式?

    c# - 如何使用 Confluence 的 .NET 客户端列出 Kafka 消费者组

    c# - 距离变换.NET

    entity-framework - 不是使用 Azure 上的 Entity Framework 创建的表

    entity-framework - Entity Framework - 代码优先模型验证

    c# - SQLite 内存数据库急切加载实体

    swift - 为什么 swift 同时提供 CGRect 初始化器和 CGRectMake 函数?

    design-patterns - 观察者模式设计和 RXJS 库