客户服务交互逻辑

时间:2015-06-01 12:47:00

标签: wcf service architecture soa

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

变体1

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

变式1b

与V1相同但不是发送状态客户端发送对象的变化'国家服务。

变体2

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

问题

  1. 哪种变体更可取?
  2. 如何准确地调用第二个变体,在哪里可以找到有关它的更多信息?
  3. 可以使用什么框架来更改对象'服务状态自动应用于客户端?

1 个答案:

答案 0 :(得分:0)

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

这是你应该遵循的第一条规则,与蒂姆所说的完全相反,它并不真正取决于你想要解决的问题,这正是我们每次都能找到非常讨厌的软件的原因。你不是试图解决一个非常具体的域问题,而是试图实现一个架构,并且有正确和错误的做法。

您似乎已经知道要使用webservices,因此我建议您使用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 - 使用我告诉你的堆栈来实现这一目标的唯一方法是使用调用客户端客户端回调的websockets。您可以使用SignalR,它使用ajax调用实现与客户端推送相同的功能。