【问题标题】:WCF Services - Best Practices for grouping Classes [closed]WCF 服务 - 分组类的最佳实践 [关闭]
【发布时间】:2013-09-13 06:59:42
【问题描述】:

我们正在规划我们的架构并考虑如何将我们的类分组到 WCF 服务中。

我们可以为每个类或紧密的类集合创建一个服务。例如,一项服务可以处理与用户数据有关的所有事情。这将导致大量相对较小的服务。

或者,我们可以将类分组创建为服务。例如,一项服务包含所有数据实体(用户、订单、客户等)的类。

或者介于两者之间。

我可能对这些应该如何关联或查找错误的地方有误解,但我找不到任何指导。

拥有许多服务是个坏主意吗?他们每个人都有很大的开销吗?如果我们确实对它们进行了分组,后来又想更改分组,那会是个问题吗?

【问题讨论】:

    标签: c# wcf architecture


    【解决方案1】:

    我将确定我的逻辑的哪些部分需要对服务的消费者可用。

    它会是一组类似 CRUD 的服务,包括大量的添加、更新、删除吗? WebAPI 可能是 WCF 的一个很好的轻量级替代方案。额外的好处是,如果您认为该用例很有价值,那么您可以让更多的消费者(不仅仅是 .NET)开箱即用地访问这些服务。

    我会看看您如何看待您的消费者使用您的服务。我认为拥有一个单一的服务与许多较小的服务相比没有任何额外的开销成本。从应用程序池的角度来看,拥有多个较小的服务甚至可能是有利的。

    老实说,我认为组织服务的方式没有错误。你正在考虑它的事实足以让我相信你不会把事情搞砸。

    【讨论】:

    • 谢谢,但我还是不清楚。我们将有一组数据实体,每个实体都需要 CRUD。我们希望我们会为这些创建一个基类来处理公共元素,我认为基类及其所有子类将进入一个服务,并且我们需要处理缩放(因为它会被大量使用)通过使用适当的实例上下文模式在多个实例中运行该服务。然后,我们将拥有其他服务来收集类似的业务功能集等。
    • 这些是 Windows 工作流服务吗?查找请求/响应模式。缩放可以由 IIS 处理,然后是多个带有负载均衡器的服务器。您希望使您的服务调用尽可能原子化,因此您不需要维护会话或与同一服务器的连接。 RequestDoWork,DoWork,返回 ResponseDoWork。
    • 服务展示层将是 Web UI。我想我现在明白了。只有那些需要向表示层公开的类/服务才应该在 WCF 中。其他类只是在一个或多个类库中。那是对的吗? WCF 可以直接调用它们而不用担心 WCF。
    • 正确!只需要通过 WCF 公开需要由代码访问的方法,否则将无法访问您自己的类库中的方法。
    • 谢谢,但是,我仍然不清楚是否为每个对象(客户、订单、发票等)提供单独的服务,或者为所有对象提供单独的服务,或者在两者之间进行某种分组是正确的方法去吧。
    【解决方案2】:

    如果您正在考虑向客户端提供数据,您可能希望仅将 OData 用于纯粹的数据传输,然后在 OData 服务上使用服务方法来满足任何特殊处理需求。那将是我的建议。我见过一些真正糟糕的 WCF 实现,因为它们使用 WCF 进行数据传输和处理。 OData 拥有大量不同编程语言的客户端库。通过使用 OData 和拦截器,您可以节省大量的编码时间。

    编辑:

    我应该提一下,OData 不一定是灵丹妙药,事实上,某些用例更倾向于使用 AutoMapper(nuget 包)实现的 DTO(数据传输对象),但我是 OData 的忠实粉丝。

    附加编辑:

    我知道 DTO 和 AutoMapper 在代码中有点冗长,但我一直从 Xamarin Mobile 的角度思考,这些 DTO 类直接推送到您的 Mobile 项目中,使用您的服务进行映射变得轻松而快速,而且您获得大量代码重用。特别是如果您需要在 SQLLite 中的移动设备上进行本地数据缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多