【问题标题】:Designing WCF service interface. Procedural vs Object Oriented Design设计 WCF 服务接口。程序与面向对象的设计
【发布时间】:2010-10-13 05:38:19
【问题描述】:

我们正在构建可供其他系统使用的产品。因为我们有 SOA,所以我们只开发一个服务 (WCF)。我们就如何设计该服务的界面进行了几次有争议的讨论。我们在服务的程序设计和面向对象设计之间进行选择。

由于我们的服务将使用 .NET 和 Java,有人说如果它具有 OO 设计,则很难与服务集成。其他人认为服务桅杆不使用OO方法。有人说OO完全没问题。结果我们没有明显的凹陷。

WCF 提供了使用这两种设计的简单方法,但最好的方法是什么?

【问题讨论】:

  • 我看不出服务接口到底是怎样的,它只是一个 Web 服务接口。您是否在询问服务的方法是否应该返回/接收复杂类型而不是标量参数?如果这就是您要问的,请使用复杂类型。还是你问webservice的实现是否应该遵循OO设计?
  • 感谢您的回答。我的问题是关于服务的方法是否应该接收复杂类型而不是标量参数?只是“使用复杂类型”不是一个论点。

标签: oop wcf procedural


【解决方案1】:

我假设您使用的“面向对象”的定义是管理“对象”的程序的概念,这些单独的对象管理它们的内部状态并公开要调用的函数。

与此最接近的 WCF 并行是基于会话的服务,其中每个服务实例的生命周期由客户端控制。

如果您希望 Java 调用此服务,则必须使用 basicHttpBinding,因为它使用经典的 Web 服务协议。

此绑定不支持基于会话的服务,因此您实际上不能使用基于会话的服务。

因此,您不能将“面向对象”范式应用于服务本身。

【讨论】:

  • +1,而且,采用 OO 方法进行服务设计会导致服务过于细化。您应该以粗粒度的服务为目标。我会考虑“消息”而不是“对象”。
【解决方案2】:

您通过说: “我的问题是服务的方法应该接收复杂类型而不是标量参数吗?”

你应该问自己以下问题:

a) 服务是否有可能被非 OO 客户端使用?不知道,COBOL 批次?即使您的公司已在 OO 技术(Java/.NET)上标准化,将来该特定服务是否有可能被某些外部实体(客户、PHP 网站等)使用

b) 您过去是否已经创建了许多这样的服务(因此您完全确定复杂类型不存在编组/序列化/反序列化问题,或者至少知道您可以安全地使用什么)?

如果您对这两点都充满信心,那么可以随意使用“OO”方法为您的服务设计输入和输出。否则,请采用最安全(如果更原始)的方法,并将“对象”分解为标量组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多