领域驱动设计、.NET 和实体框架

Posted

技术标签:

【中文标题】领域驱动设计、.NET 和实体框架【英文标题】:Domain Driven Design, .NET and the Entity Framework 【发布时间】:2011-01-05 22:33:23 【问题描述】:

我是域驱动设计的新手,但想学习它并将其用于新的应用程序。 我将使用实体框架进行数据访问。

到目前为止的基本布局是:

ASP.NET MVC 和其他客户端(移动 设备等) | 网络服务 | 领域模型(服务、存储库、聚合、实体和值对象) | 数据访问层(实体框架) | 数据存储 (SQL Server)

在数据访问层和域模型之间传输数据的最佳方式是什么? 我认为域模型中的实体是 POCO 对象,它们应该映射到实体框架对象/从实体框架对象映射。这是一个好的解决方案吗?

如果是这样: 这种映射应该如何以及在哪里发生? (域模型层或数据访问层) 我应该在哪里以及如何查询实体框架(即根据搜索返回一个列表)?

【问题讨论】:

请记住,DDD 最终只是一种以客户自己的语言(域)有效地与客户沟通的方式,然后以与该语言一致的方式设计您的应用程序。它本身不是一种开发技术。因此,对于将什么放在哪里,没有硬性规定。 @Robert Harvey:非常正确,但对于如何将 DDD 指南应用于特定(可能相当普遍)的情况提供一些指导仍然非常有用。 【参考方案1】:

ANDREY YEMELANOV 已经完成了关于这个确切主题的硕士论文:

http://gupea.ub.gu.se/dspace/bitstream/2077/10462/1/gupea_2077_10462_1.pdf

随着支持 POCO 对象的 EF 4 的发布,这将变得更加容易。

与此同时,您可以尝试使用 automapper 在域和 EF 对象之间进行映射,请参阅:http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/01/22/automapper-the-object-object-mapper.aspx

【讨论】:

【参考方案2】:

我会从 ableobjects.com 购买企业核心对象 (ECO)

确实everything you would ever want from a DDD framework

【讨论】:

【参考方案3】:

S#arp architecture project 是指导应用 DDD 的绝佳起点。它基于 NHibernate,但使用的原则应该同样适用于 EF...

【讨论】:

【参考方案4】:
我认为域模型中的实体是 POCO 对象,它们应该映射到实体框架对象/从实体框架对象映射。这是一个好的解决方案吗?

我认为是的。

这是我们已经非常成功地完成的事情,尽管在我的例子中是在 Java 世界中。我们的领域类包含大部分业务逻辑。每个都有一个对瘦数据实体对象的引用,并将持久属性的获取和设置委托给数据实体。

【讨论】:

以上是关于领域驱动设计、.NET 和实体框架的主要内容,如果未能解决你的问题,请参考以下文章

领域驱动设计和Spring

领域驱动设计和Spring(翻译)

首席架构师老曹推荐阅读:领域驱动设计和Spring

.NET领域驱动设计—初尝(原则工具过程框架)

如何运用领域驱动设计 - 实体

基于 ABP Framework 实现领域驱动设计