使用Entity框架4进行域驱动设计

RKP*_*RKP 5 .net architecture design-patterns entity-framework entity-framework-4

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

使用Entity Framework实体作为业务对象?

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

此链接清楚地解释了问题

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

Shi*_*iji 9

这取决于你想要/需要的松散耦合程度.

例如,WPF/MVVM应用程序通过WCF与服务对话并使用EF存储数据.然后,如果你一路走下去,你有以下几点:

在客户端:

  • 视图
  • 视图模型
  • 模型

客户端和服务器之间:

  • 数据传输对象

在服务器上:

  • 商业实体
  • EF实体

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

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

由于以下原因,我不会将它们用作DTO:

  • 数据库中的更改可能会影响许多系统
  • 非MS客户可能正在使用您的服务