【问题标题】:WCF: Use partial classes to split up a complex Web Service?WCF:使用部分类来拆分复杂的 Web 服务?
【发布时间】:2011-09-27 20:55:03
【问题描述】:

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

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

为此,我创建了以下类:

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

我的问题如下:

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

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

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

这具有处理一个大类拆分为多个文件的缺点,即:如果开发人员“看不到全局”,它更难维护并且更容易出错。

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

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

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

感谢您的意见!

【问题讨论】:

    标签: wcf web-services partial


    【解决方案1】:

    我个人不会使用部分类来拆分类;推动 tgis 拆分的庞大规模表明该类太大,需要重构。在我看来,部分类的主要目的是为自动生成的代码添加更改。

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

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

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

    【讨论】:

    • 感谢 Faester,您的评论证实了我对部分课程的担忧。我也感谢您的意见,我会遵循您的指导方针。但是有一个问题,您所说的“可以使用 web.config 中的命名行为共享服务和端点”是什么意思? (我刚刚习惯了 WCF :))。我了解可以使用行为“配置”服务和端点,但我不确定您所说的共享服务和端点是什么意思......?您的意思是行为本身可以共享吗?
    • 抱歉,打错了。正如你所建议的,我的意思是共享配置。 (大多数人讨厌配置 WCF,为什么在此处重用是个好主意。错字现已修复。)我很高兴得知您可以使用我的 cmets :)
    【解决方案2】:

    当您谈论 n 份服务合同时,这里要考虑的重要一点是与实施每个服务合同相关的成本。这里有一篇很好的博客文章,"Service Contracts Factoring and Design",尽管如果不是 Juval Lowy 发布了这篇文章,那么显然有人在敲诈他(我指的是 Juval 的书 - “Programming WCF Services”第 93 页)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多