Entity framework 域对象和EF实体的DDD分离

Entity framework 域对象和EF实体的DDD分离,entity-framework,domain-driven-design,wcf-data-services,Entity Framework,Domain Driven Design,Wcf Data Services,在最近一次从EF4.0升级到EF5.0和Code First的过程中,我们的团队决定通过使持久化对象的POCO表示这些持久化POCO中的数据库列和关系的1对1映射来解决我们的问题。对于每个持久性对象使用FluentApi配置,我们暂时称之为“持久性对象”。一些域对象利用抽象类、多个接口和业务规则中的sespecifications跨多个持久对象进行分割。由于DDD将域业务对象称为“实体”,我们发现这一点令人困惑,因为EF指的是实体。我们将POCO放在一个单独的库项目中。对我来说,他们开始看起来像

在最近一次从EF4.0升级到EF5.0和Code First的过程中,我们的团队决定通过使持久化对象的POCO表示这些持久化POCO中的数据库列和关系的1对1映射来解决我们的问题。对于每个持久性对象使用FluentApi配置,我们暂时称之为“持久性对象”。一些域对象利用抽象类、多个接口和业务规则中的sespecifications跨多个持久对象进行分割。由于DDD将域业务对象称为“实体”,我们发现这一点令人困惑,因为EF指的是实体。我们将POCO放在一个单独的库项目中。对我来说,他们开始看起来像道斯

鉴于上述情况,是否选择首先将域对象从持久化POCO契约中分离出来


我提出的反对意见是,这意味着持久对象将作为WCF数据服务对象公开。我停止了开发,直到我们有了一个小的工作版本(我们的核心对象可以被推到5个表和3个域对象)。在我确信这是一个最佳实践或更好的方法,更接近于Eric在蓝皮书中的大纲之前,我不想继续使用其他70多个POCO。

我已经这样做了,在单独的项目中拆分域实体和EF映射类。我也曾与nhibernate合作过。 在与基础设施相关的项目中保留映射类。这是关于你坚持的知识


关于为wcf服务公开实体,我建议您选择应用程序层,并使用数据传输对象模式公开数据。没有花哨的东西。只是让您更好地控制WCFAPI的粒度。通常领域实体的级别很低,需要知识和多个调用才能获得特定交互(用例)所需的数据

我可能错过了一些东西,但为什么要使用这些中间“持久对象”,而不仅仅是利用EF fluent配置器将域对象映射到DB?谢谢。。。。我很乐意随时为您解答有关DDD的问题。我现在就在DDD项目的中间,所以它的新想法:现在我们的POCOS生活在持久性项目中。我们基于谷歌代码的NDDDSample的结构。我们仍在争论WCF数据服务代理项目应该放在项目中的什么位置。它看起来像“接口”或“基础设施”。你对此有什么想法?嗨,谢谢你迟来的回答。瑞典的假日时间:)我肯定会将您的WCF项目视为“客户”——应用程序服务(接口)的消费者。“客户端”可以是移动应用程序客户端、外部系统、web GUI。。。我是一名visual studio开发人员,准确地说,我会有一个AppName.Presentation项目、AppName.Application项目、AppName.Domain项目、AppName.Infrastructure.DAL项目。当谈到WCF代理时,我会将其放在AppName.WCFFacade。它是一个顶层。与另一个客户端(如GUI)的级别相同。它应该只引用AppName。应用程序服务层。。。也可能是下层