领域驱动设计和实体框架4.1(代码优先)

7
我目前正在学习领域驱动设计开发方法,并使用 Tim McCarthy 的 .NET 领域驱动设计与 C# 书作为指南。
这本书非常有帮助,但是当涉及到使用实体框架(尤其是在4.1中提供的Code-First方法)时,我遇到了一些困难。
根据书中的例子,分层结构的方法应该意味着基础设施层不能看到模型/领域层。
那么,如何最好地将我的领域 POCOs 映射到 DB 上下文类中(我假设应该位于基础设施层),而不违反分层方法?
我可能完全错误了,请告诉我,因为我仍在学习!
非常感谢 :)
Adam

1
如果您正在使用Code-First EF,则POCO实际上是您的领域模型。 - Didaxis
是的,我理解了,但是你如何在不同层之间引用这些对象,特别是从基础设施到领域/模型层? - adam
我的模型在一个类库中,业务库引用了那个DLL。我建议在线阅读一些关于工作单元和仓储模式的文章 - 它们与POCO很搭配。这里是链接:http://www.asp.net/entity-framework/tutorials/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application - Andrei Drynov
1个回答

8
大多数ORM(例如EF 4.1和Nhibernate(流畅的Nhibenrate附加组件))如今都可以通过映射类描述从POCO到Db上下文的映射。这些映射类最好放在基础设施数据库项目中,可能与ORM会话特定的类一起。
然后,您的POCO域类应该放在一个不应引用其他组件或项目的域项目中。但是,基础设施数据库项目应引用域,以便您的映射类可以描述如何从持久状态加载POCO。
使用大量依赖注入和良好而稳定的IoC框架(Windsor Castle...)。这将帮助您稍微放松一下。最好依赖于一个抽象/接口而不是实现。
这里是基础知识:http://www.infoq.com/articles/ddd-in-practice 但很高兴您决定采用Code First方法。如果您有选项,我真的推荐采用这种方法。但有时当旧的遗留系统干扰时,事情并不那么简单。

谢谢Magnus,这是我采取的方法——分离程序集引用领域和基础设施层!昨天试玩了一下,Code-First似乎是EF的一个不错的特性! - adam
祝你好运,Adam。随时可以直接向我提出或讨论其他领域驱动设计问题。我总是很有兴趣看到人们以不同的方式看待问题... - Magnus Backeus
谢谢Magnus - 我还有几个问题,最好的联系方式是什么? - adam
请使用我的电子邮件magnus.backeus@gmail.com - Magnus Backeus
嗨Magnus,感谢您提供的实用建议。我也计划采取同样的方法。我的项目很大,分为模块。每个模块都有自己的域项目,并且它将具有单个项目与DataContext / Mapping类。现在,每个域项目都需要相互引用,因为它们之间可能存在关系。这可能会导致循环引用。我的相关SO问题是:-http://stackoverflow.com/questions/11502929/ddd-modules-and-ef-code-first--谢谢。 - Anand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接