在所有解决方案项目中共享域模型对象

时间:2011-02-27 21:06:26

标签: c# .net architecture entity-framework-4

在构建项目时,我总是遇到同样的情况。我有主要的域模型(实体框架模型)。我添加了一个wcf数据服务项目来帮助查询此模型。现在,如果我想使用模型的其中一个对象,我必须引用Domain模型dll并且这并不总是好的,因为项目可能是silverlight,或者我可以使用服务引用,这可能更好的选择但不是清除poco对象。

你有什么建议可以最好地练习如何分享通用模型,所以我可以将它用于UI,远程服务...

提前致谢...

4 个答案:

答案 0 :(得分:2)

你的域名模型应该是POCO,而不是EF模型。

如果您使用纯POCO,那么您的域模型项目根本不会引用EF,它是一个基本的.NET类库,任何.NET客户端都可以使用它。

使用POCO,或在EF模型和客户之间创建一个外观,您可以在其中将EF实体投影到DTO中。

答案 1 :(得分:1)

域名模型是什么意思?你的意思是EF或T4模板生成的类吗?或者你的意思是真正的域对象,其中生成的类与包含实际业务方法的另一个部分类组合?

在前一种情况下,您可以简单地与客户共享汇编。在服务的情况下,它将在服务和客户之间产生紧密耦合,这通常被认为是一种不好的做法。但仍然存在使用WCF而不是远程处理的情况,在这种情况下,共享程序集是常见的情况。

在后一种情况下,重点是:请勿与您的服务客户共享域对象。域对象及其方法用于服务,而不是客户端。使用专门的DTO或从服务引用创建的对象。

如果您使用Web服务,则应遵循简单的规则:您的模型不会越过物理边界。这意味着模型是服务的内部,客户端不使用它。

答案 2 :(得分:0)

这可能不是一个好主意。但是我听说EF4有POCO支持,所以你可以将它们放在任何人引用的单独程序集中。

特别是对于Silverlight,请查看wcf ria services

答案 3 :(得分:0)

有关如何处理跨解决方案共享域模型的一些建议,至少有一个是Silverlight解决方案,可以在以下链接找到:

Best practice for shared Silverlight and .NET 3.5 code?