WCF:使用部分类来拆分复杂的Web服务?

时间:2011-07-04 03:57:51

标签: wcf web-services partial

我目前正在开发一个Web服务,它应该公开相​​对大量的与之交互的方式。

例如,客户端可能能够与Web服务交互,以便管理数据库中的用户或项目。

为此,我创建了以下类:

  • 两个数据合同:IUsersServiceContract和IProjectsServiceContract
  • 两个服务合同接口:IUsersServiceContract和IProjectsServiceContract

我的问题如下:

创建两个不同的Web服务是否有意义,每个Web服务都有自己的端点,而不是创建一个实现两个服务合同接口的大类?

请记住,实际上我会有更多服务合约接口来处理不同类型的数据。

据我所知,使用部分类(拆分为多个文件)将允许我创建一个只有一个端点的大型Web服务。

这样做的缺点是处理多个文件中的一个大类拆分,即:如果开发人员“看不到大局”,则难以维护并且更容易出错。

另一种解决方案是实现每个服务合同接口一个Web服务。

从本质上讲,如果我有X服务合同接口,我最终会得到带有X端点的X Web服务。

您会选择哪种解决方案?为什么?

感谢您的投入!

2 个答案:

答案 0 :(得分:4)

就个人而言,我不会使用部分类来分割类;激励tgis分裂的绝对规模表明这个类太大了,需要重构。在我看来,部分类的主要目的是为自动生成的代码添加更改。

由于可以使用web.config中的命名行为共享服务和端点配置,因此拆分服务不应该那么麻烦。但是,分裂应该通过功能分组来推动。

在不知道您服务的确切性质的情况下,听起来两个服务中可能存在自然分离;一个用于用户相关操作,一个用于面向项目的操作。

如果实现类的增长超出了你认为合理的大小,我会考虑让单独的类 - 或者更好的接口 - 处理每个方法的内部逻辑,并让服务实现它自己是一个浅层的外观,它将自己的方法参数委托给正确的logoc实例

答案 1 :(得分:1)

在您讨论 n 服务合同数量时,需要考虑的重要事项是与实施每项服务合同相关的成本。这里有一篇很好的博客文章,"Service Contracts Factoring and Design",虽然如果不是发布这篇文章的Juval Lowy,那么有人显然正在扯掉他(我指的是Juval的书 - “编程WCF服务”第93页)