在最近从EF4.0升级到EF5.0和Code First的一些规则让域模型与Code First一起使用我们的团队决定通过使持久对象的POCO表示1来解决我们的问题数据库列的映射和这些持久性POCO中的关系。对每个持久对象使用FluentApi配置,我们暂时称之为“持久性对象”。一些Domain对象利用抽象类,几个接口和业务规则中的sepcifications来分割这些持久对象中的一些。由于DDD将域业务对象称为“实体”,因此我们发现这一点令人困惑,因为EF指的是实体。我们将POCO放在一个单独的图书馆项目中。对我来说,他们开始看起来像DAO。
鉴于以上是选择将域对象与Code First的可持续POCO合同分开?
我提出的异议是,这意味着持久对象将作为WCF数据服务对象公开。我停止了开发,直到我们有一个小工作版本(我们的核心对象可以推送到5个表和3个域对象)。我不想继续推进其他70多个POCO,直到我确定这是一个最佳实践或更好的另一种方式更符合Eric在蓝皮书中的大纲。
答案 0 :(得分:2)
我已经这样做了,在分离的项目中拆分域实体和EF映射类。我也用nhibernate做过。 在基础架构相关项目中保留映射类。它对你的持久性的了解。
关于为wcf服务公开实体,我建议你去一个应用层并用数据传输对象模式公开数据。没有花哨的东西。只是让你更好地控制你的wcf api的粒度。通常,域实体处于如此低的水平,它需要知识和多重调用来获取特定交互所需的数据(用例)。