2009-12-12 60 views
0

在我的WPF应用程序数据模型中,我有多个类表示通过WCF自托管服务与后端数据库进行交互的数据。WCF多个数据合同或代表多个数据模型类的多个服务合同?

我应该有我的WCF服务队多个数据协定或多个服务联系人或端点表示这些多WPF数据模型类?在这种情况下构建WCF的正确(或者唯一)方法是什么?

回答

2

有一个名为Interface Segragation Principle的设计建议,它基本上说明了iDesign WCF编码标准还说了什么:不要让您的接口(=您的服务合同)太大而且太笨重。

考虑一下:你有数以百计的方法,一个巨大的服务合同,以及一些第三方想实现的功能的子集,也许只有两三个的那些服务的方法。如果你有一个巨大的服务合同,他们将不得不实施他们感兴趣的3-4种服务方式,而其他所有服务方式则需要存储一个虚拟服务 - 例如,像throw new NotImplementedException();或东西。总的来说,这不是一个好主意。

因此,基本原则应该是:尽量将您的服务合约分组,以便如果有人需要实施子集,他们很可能会找到具有所需方法的单一服务合同,并且没有其他的。尝试按主题分组您的服务合约,例如如果您有6种搜索地址的方法,请将它们放在单独的服务合同中。如果您有7种其他方法来插入新地址,请更新和删除现有的地址 - 这应该可能是单独的服务合同(因为您可以想象有人希望仅搜索地址 - 不会修改任何内容)。

所以我想有没有真正的硬性规定什么是好还是不好 - 尝试组为您服务到方法“逻辑连接”组。当然,这不是一件容易的事情!但值得努力去思考其他人如何使用你的服务。

另外,如果你有一些小的服务合同,这也是一个容易得多,如果你需要任何改变。如果您需要在服务合同中引入突破性变更,那么只有那些具有少数方法的特定服务合同的用户(希望很少)会受到影响。如果你总是不得不改变你的200万方法服务合同,那么你总是会影响每个人 - 这可能不是一件好事!

+0

谢谢,Marc!所以,据我了解,这完全是关于良好的设计考虑因素,从技术上来说,拥有200方法服务合同没有错,它不会影响性能? – rem 2009-12-13 07:11:42

+0

是的。在单一接口上有200个方法没有性能问题 - 更多的是设计/可维护性问题 – 2009-12-13 09:13:07

1

在WCF术语中,数据合同是在服务合同操作中使用的类。它被称为数据合同,因为它通常用DataContractAttribute进行注释,以便成功识别和序列化(尽管从.NET 3.5 SP1 DataContractSerializer开始适用于POCO对象,并且不再需要此属性)。因此,您可以通过多个操作来处​​理单个服务合同,处理多个数据合同,并将这些合同暴露在单个端点中。

+0

谢谢Darin。那也是我想到的。我怀疑是由于围绕一些关于WCF的最佳实践建议(例如,来自idesign.net“WCF编码标准”)的讨论而导致的:......(5)努力让每个服务合约有三到五个成员。 (6.)每个服务合同中不得有超过20个成员。十二个可能是实际的限制...也许我理解错误。请你清楚我的错在哪里?谢谢。 – rem 2009-12-12 18:29:02