在企业级程序集中定义DataContracts,然后在WCF服务项目中引用它们,而不是在单个WCF服务解决方案级别定义它们,这是一种良好的实践吗?我所见过的所有WCF示例都回避了这个主题,并且只在服务解决方案中定义了DataContracts。与我交谈过的一些程序员希望将DataContracts看作是企业级规范数据模型的另一种风格,而不是服务本地契约。我还没有找到任何支持或反对这一观点的论据。
这个问题可能很难选择正确的答案,但我会试一试。我至少会对任何我认为有助于我对这个话题的理解的事情表示赞同。
发布于 2009-01-13 23:29:31
我真的很喜欢将DataContracts (和服务契约)放入程序集中,然后将它们与服务和客户端等共享的想法,但我看不出有任何好的理由将它们全部放入一个整体程序集中。
根据它们的使用方式将它们放入程序集中更有意义。如果在多个服务和客户端之间共享它们的组,则这是一个组装,依此类推。
这样做消除了公开元数据的需要,我认为它会让您做一些很好的事情,比如挂接到服务器端和客户端的序列化事件中。
发布于 2009-01-14 23:28:19
IDesign.net的人建议在项目之间共享契约程序集。我个人推荐这样做,而不是为所有东西创建代理。真的没有一个令人信服的理由不这样做。
在这里确保您的关注点是分开的,这一点很重要。您建议的程序集应该只包含类型,而不包含任何实现,否则您会被更频繁地重新分发DLL所困扰。
我还建议您将版本合并到程序集中的契约分组为程序集,而不是一个整体程序集。在对企业级合同进行非常小的更改时,这将减少您的开销。
发布于 2009-01-13 23:30:04
与计算机科学中的大多数事情一样,答案是-这取决于:)
您的数据契约类是否只与一个、两个服务或整个企业的范围相关?它们可能会改变吗?想一想这些问题。
如果您确实想让它们成为全局程序集的一部分,并且您正在使用DataContract 3.5 Sp1,那么您应该知道,您的数据类中不再需要DataContract/DataMember属性。如果你不想依赖于System.ServiceModel (大多数情况下你并不想依赖),它可能会很有用。
https://stackoverflow.com/questions/441216
复制相似问题