【问题标题】:Design pattern for iPhone -> web service functionality?iPhone的设计模式-> Web服务功能?
【发布时间】:2009-11-25 06:47:49
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone web-services design-patterns


    【解决方案1】:

    我最近遇到了同样的问题。虽然我不认为我的解决方案是最佳的,但它可能会对您有所帮助。

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

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

    总而言之,这对我来说似乎工作得很好。我确实遇到了这样一种情况,即一个端点依赖于另一个端点的响应(我在那里使用了命令模式)。

    您要查看的 SDK 组件是:

    • NSURLConnection
    • NSXMLParser

    【讨论】:

    • 我正朝着这种解决方案前进,听起来我不是唯一一个想到这个的人。在我看来,唯一的区别是不使用委托,而是使用 KVO,因为我可能同时拥有多个端点消费者。这也可以让我稍后注入某种缓存逻辑,因为一切都只是观察同一个端点对象。稍后将更新这将如何结束。
    • 委托主要是通知web服务管理器端点已经完成,如果端点失败由服务管理器决定怎么做。我使用 KVO 来更新大部分使用数据的视图。
    【解决方案2】:

    工厂?我们不需要臭气熏天的工厂。

    我已经做过几次了,我基本上按照你说的做:一个对象,为所有 Web 服务调用提供方法,封装与服务通信的细节,处理连接问题等。在一个应用是单例,因为它需要保持会话状态;在另一个应用程序中,它只是静态方法的集合。

    除了响应数据的一些格式之外,这就是它的全部责任。

    调用是同步还是异步由调用者决定;类本身是同步编写的,如果需要,调用者只需在单独的线程中使用它。 Cocoa 的 performSelector... 方法让这一切变得简单。

    【讨论】:

      【解决方案3】:

      如果 REST 非常适合您的数据交互,那么我建议您使用 ObjectiveResource 库。它旨在与 Ruby on Rails 应用程序无缝协作,但它基本上使用 Rails ActiveResource 约定通过 HTTP 使用 JSON 或 POX(普通的旧 XML)。

      它基本上是 NSObject 上的一组类别和一些原始对象类型,它们可以让您调用 [Dog findAllRemote] 来返回 Dog 对象列表,或 [myDog saveRemote] 来发送对 myDog 对象所做的更改回到服务器。

      【讨论】:

        猜你喜欢
        • 2010-12-10
        • 1970-01-01
        • 2010-12-18
        • 2012-07-05
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 2012-11-20
        相关资源
        最近更新 更多