AFNetworking 设计模式

Posted

技术标签:

【中文标题】AFNetworking 设计模式【英文标题】:AFNetworking Design Pattern 【发布时间】:2013-01-02 19:20:24 【问题描述】:

所以,我将 AFNetworking 用于 ios 应用程序,我只是进行了一些重构以包含一些网络可达性代码。我之前对请求等参数进行编组的设计模式是创建特定于服务的请求参数,然后使用这些参数创建一个 NSURL,然后创建一个 NSURLRequest。

我要连接的服务无处不在——有些需要签名请求、访问令牌、混乱的苦涩等(Twitter、Foursquare、Instagram、Tumblr 等)。

对于每个服务,基于通用的、服务无关的协议,我有能够检索状态、检索用户的配置文件数据等的方法。在这些方法中,我创建了一个 AFHTTPClient 并且工作正常。

但是,既然我正在添加一些应用程序语义 [AFHTTPClient setReachabilityStatusChangeBlock:],我想知道我是否应该为处理各种服务请求的类的每个实例创建一个 AFHTTPClient,而不是为其中的每个方法创建一个那个处理服务请求的类?定义可达性状态更改块

有人对在这种情况下使用的良好设计模式有什么建议吗?我的意思是——我可以解决一些问题,但我想知道是否存在“最佳实践”/“从经验中构建”模式?

一般来说,我处理来自特定服务的请求的类是长期存在的。在运行时登录的每个“用户”都有一个,尽管用户数量通常很少——几十个。

我想我要问的是——一般来说,人们通常在哪里定义他们的 AFHTTPClient,他们通常有网络可达性状态更改块做什么? (本能说:取消操作,如果状态表明互联网已消失,则提醒用户,当然——但任何巧妙的“重试”语义等?)

【问题讨论】:

这个问题很难全面回答。只是提供一点我的经验;我们通常将网络相关的 IO 捆绑在某种 API 控制器中。该控制器可能是也可能不是一个类集群,管理所有不同的 API(例如 Facebook 与 LinkedIn)。该控制器将 AFNetworking 与应用程序的其余部分完全隔离开来。 【参考方案1】:

在我的应用程序中,坚持“每个 API 服务器一个 APIClient”的规则。当向每个 APIClient 添加不同的位和技巧时,这很方便。它们可能因授权类型和加密而异。

关于可达性。您是否尝试过为此目的使用NSNotificationCenter。这就是创建的目的 - 填充广泛使用的事件。您可以查看Reachability 库及其示例。

【讨论】:

以上是关于AFNetworking 设计模式的主要内容,如果未能解决你的问题,请参考以下文章

异步获取大量资源并将它们“异步”保存到数据库中。使用哪种好模式? (AFNetworking,核心数据)

AFNetworking 离线队列

AFNetworking中的ARC斗争[关闭]

iOS网络开发之AFNetworking

NSURLSession -- 备忘

如何使用 AFNetworking-2.0 执行 JSON 编码的 GET 请求?