【问题标题】:Client-service interaction logic客户端-服务交互逻辑
【发布时间】:2015-08-14 22:27:47
【问题描述】:

似乎有几种方法可以实现客户端-服务交互逻辑。

变体 1

客户端实现了一个类似于服务对象模型的对象模型(例如WCF Data Services)。客户端对对象进行更改、创建和注册新对象。完成后,创建和更改对象的状态将发送到服务。服务从数据库中恢复现有对象/创建空对象并合并状态。

变体 1b

与 V1 相同,但客户端不发送状态,而是将对象状态的更改发送给服务。

变体 2

客户端根本不向服务发送对象状态!相反,它调用服务方法、服务更改对象并通知客户端有关更改。客户按原样应用这些更改。

问题

  1. 哪种变体更可取?
  2. 第二个变体的确切名称是什么?在哪里可以找到有关它的更多信息?
  3. 可以使用什么框架来自动在客户端上应用对象状态的更改?

【问题讨论】:

  • 我会说首选变体取决于您要解决的问题。

标签: wcf service architecture soa


【解决方案1】:

http://martinfowler.com/bliki/FirstLaw.html

这是您应该遵循的第一条规则,与蒂姆所说的完全相反,它并不真正取决于您要解决的问题,这正是我们可以找到每个他们都非常讨厌的软件的原因。您不是在尝试解决一个非常具体的领域问题,而是在尝试实现一种架构,为此存在正确和错误的做事方式。

您似乎已经知道要使用 Web 服务,所以我建议您使用 ASP.NET 而不是 WCF 构建 REST API,因为它更易于使用。

至于您的变体,我会选择第二种,因为它符合 REST 原则。您的“服务器”保存对象,您通过使用 REST API 更改它们的状态来询问它。此外,客户端永远不应该持有服务器对象的副本,相反,客户端应该持有表示该对象在服务器上的样子的模型。这与过去使用 .NET Remoting、Corba、RMI 等技术所发生的情况完全相反,其中客户端通过对象代理使用服务器对象并直接在它们上调用方法,非常类似于您的变体 1,但我们现在过去,越来越多的 API 是围绕带有 REST 的无状态 API 构建的。

  • 1 - 2
  • 2 - 这实际上取决于您想要使用哪种技术。如果你在 MSFT 方面,ASP.NET Web API 是一个大堆栈,对于客户端 (UI),也许是 ReactJS
  • 3 - 使用我告诉您的堆栈实现此目的的唯一方法是使用调用客户端客户端回调的 websocket。您可以使用 SignalR,它使用 ajax 调用实现与客户端推送相同的功能。

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多