iPhone的设计模式 - >网络服务功能?

时间:2009-11-24 21:29:36

标签: iphone web-services design-patterns

我正在开发一个应用程序,它将与暴露多种方法的Web服务进行通信。我试图弄清楚什么是最好的模式来集中访问Web服务,提供同步和异步访问的选项,并将数据返回给客户端。有人解决了这个问题吗?

所有方法的一个类似乎可以很好地集中所有方​​法,但我认为将数据返回到正确的位置会很困惑,特别是在处理多个异步调用时。我的另一个想法是每个方法都有一个单独的子类,有某种工厂代理访问权限,但我认为这可能是过度设计的情况。

(注意:不要求使用什么方法调用/如何解析响应/等,寻找一般问题的高级设计模式解决方案)

3 个答案:

答案 0 :(得分:1)

我最近遇到了同样的问题。虽然我不相信我的解决方案是最佳的,但它可能会帮助你。

我创建了一个Web服务管理器和一个端点协议。实现端点协议的每个对象负责连接到Web服务端点(方法),解析返回的数据,并通知其委托(通常是Web服务管理器)完成或任何错误。我最终创建了一个99%的时间使用的EndpointBase类。

Web服务管理器负责根据需要实例化端点并调用它们。所有的调用都是异步发生的。

总而言之,它似乎对我来说非常好。我最终得到的结果是一个端点依赖于另一个端点的响应(我在那里使用了命令模式)。

您要查看的SDK组件是:

  • NSURLConnection的
  • 的NSXMLParser

答案 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对象所做的更改回到服务器。