我正在开发一个应用程序,它将与暴露多种方法的Web服务进行通信。我试图弄清楚什么是最好的模式来集中访问Web服务,提供同步和异步访问的选项,并将数据返回给客户端。有人解决了这个问题吗?
所有方法的一个类似乎可以很好地集中所有方法,但我认为将数据返回到正确的位置会很困惑,特别是在处理多个异步调用时。我的另一个想法是每个方法都有一个单独的子类,有某种工厂代理访问权限,但我认为这可能是过度设计的情况。
(注意:不要求使用什么方法调用/如何解析响应/等,寻找一般问题的高级设计模式解决方案)
答案 0 :(得分:1)
我最近遇到了同样的问题。虽然我不相信我的解决方案是最佳的,但它可能会帮助你。
我创建了一个Web服务管理器和一个端点协议。实现端点协议的每个对象负责连接到Web服务端点(方法),解析返回的数据,并通知其委托(通常是Web服务管理器)完成或任何错误。我最终创建了一个99%的时间使用的EndpointBase类。
Web服务管理器负责根据需要实例化端点并调用它们。所有的调用都是异步发生的。
总而言之,它似乎对我来说非常好。我最终得到的结果是一个端点依赖于另一个端点的响应(我在那里使用了命令模式)。
您要查看的SDK组件是:
答案 1 :(得分:1)
工厂?我们不需要任何臭名昭着的工厂。
我已经完成了几次,我基本上就是你所说的:一个为所有Web服务调用提供方法的对象,封装与服务通信的细节,处理连接问题等。一个应用程序它是一个单身人士,因为它需要保持会话状态;在另一个应用程序中,它只是一组静态方法。
除了响应数据的某些格式外,这也是其全部责任。
调用者需要调用的是同步调用还是异步调用;类本身是同步编写的,如果需要,调用者只需在单独的线程中使用它。 Cocoa的performSelector ...方法很容易。
答案 2 :(得分:1)
如果REST非常适合您的数据交互,那么我会建议使用ObjectiveResource库。它旨在与Ruby on Rails应用程序无缝协作,但它基本上使用rails ActiveResource约定通过HTTP说JSON或POX(普通旧XML)。
它基本上是NSObject上的一组类别和一些原始对象类型,它们可以让您像[Dog findAllRemote]一样调用以返回Dog对象列表,或者[myDog saveRemote]来发送对myDog对象所做的更改回到服务器。