似乎有几种方法可以实现客户端 - 服务交互逻辑。
变体1
客户端在服务上实现类似于对象模型的对象模型(例如WCF Data Services
)。客户端对对象进行更改,创建和注册新对象。完成后,将创建和更改的对象的状态发送到服务。服务从数据库中恢复现有对象/创建空对象并合并状态。
变式1b
与V1相同但不是发送状态客户端发送对象的变化'国家服务。
变体2
客户端根本不会将对象状态发送给服务!相反,它调用服务方法,服务更改对象并通知客户端有关更改。客户端按原样应用这些更改。
问题
答案 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构建的。