在构建项目时,我总是遇到同样的情况。我有主要的域模型(实体框架模型)。我添加了一个wcf数据服务项目来帮助查询此模型。现在,如果我想使用模型的其中一个对象,我必须引用Domain模型dll并且这并不总是好的,因为项目可能是silverlight,或者我可以使用服务引用,这可能更好的选择但不是清除poco对象。
你有什么建议可以最好地练习如何分享通用模型,所以我可以将它用于UI,远程服务...
提前致谢...
答案 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解决方案,可以在以下链接找到: