【问题标题】:Best practices for iOS fetch requestiOS 获取请求的最佳实践
【发布时间】:2014-03-31 23:15:00
【问题描述】:

我已将 AFHTTPSessionManager 子类化为发出请求。我有一个用于解析传入 JSON 的模型类。

我应该在哪里执行提取请求?在我的模型中,ViewController 还是应该为请求使用包装器?

在这种情况下,哪些是最佳做法?

【问题讨论】:

  • 嘿 Carlos,这里有很多人愿意提供帮助,但请确保您已经展示了您尝试过的方法、无效的方法以及您的问题的背景。还要确保您已阅读how-to-ask,然后编辑您的问题以更好地吸引人们花费时间和精力。就目前而言,很难给你一个有限的答案,而且答案很可能完全基于意见。
  • 我相信他的问题更多是关于 OOP 原则而不是实际实现。
  • 你真的在使用 RestKit 吗?应用程序的总体概要及其使用/同步的数据是什么?
  • @Wain 我只是使用 AFNetworking,并异步获取数据 (JSON)

标签: ios objective-c json afnetworking


【解决方案1】:

在开始我的项目时,我也有过同样的问题。我是这样做的:

Base Class 使用 AFNetworking 完成所有 fetch / put HTTP 请求。 Web service class 对基类一无所知 - 只是如何使用它,我在这个意义上制作了通用方法。 Data class 构造了我请求所需的 url / 参数。

通过这种方式,应用程序的其余部分对网络层一无所知。数据类知道如何将 URL / 参数放在一起并请求网络调用。就是这样。 Web 服务类知道如何根据提供给它的信息进行调用,从数据类和基类知道如何发出请求、获取响应。

然后,我将响应交给一个基础 XML/JSON 类,该类开始解析从基础 Web 服务类返回的数据。一旦数据被解析,它就会被存储到数据类中,并使用所需的正确模型对象。从那里 - 应用程序只是向数据类询问数据。

通过这种方法,应用的顶层知道如何请求数据并将其取回。它对该过程的内部工作一无所知。这意味着,将来,如果我决定更改为不同的网络库,我只需要修改一个类而不是一大堆代码。

简而言之,我是这样构造的:

  • ViewController 类或其他一些类从Data class 请求数据
  • Data Class然后构造请求所需的URL和参数
  • Webservice classData Class 中获取 URL 和参数并将其放入请求中,然后将其发送到基础 Web 服务类
  • Base webservice class 然后使用完整的 URL 进行调用。它处理响应,如果响应成功,它会将其放入 NSData 对象中 - 然后将其移交给 XML / JSON 类
  • XML /JSOn 类知道如何处理数据对象并开始解析。完成后,它会将其返回给存储为自定义 NSObject 的Data class

一旦发出原始调用的类收到关于 http 请求和解析已完成的通知,它就会向“数据类”询问该数据。

由于我上面提到的原因,这种类及其职责的分离非常有效。更改应用程序的一部分,不需要大量重写许多类。最多两点。

我希望这能让您朝着正确的方向前进。

【讨论】:

  • 很好的解释。我正在做一个类似的项目,但我只是使用 NSURLConnection。我用两个抽象级别做了类似的事情。每当我需要添加新功能时,我的连接类永远不会改变,我只需要为我的新方法调整协议和特定功能。强烈推荐 Tander 的方法。
  • 这就是整个想法。当您需要扩大规模时 - 您的网络层保持不变。唯一必须更改的是如果您更改库或使用 NSURLConnection 代替。 :-)
  • 非常感谢 Tander,这正是我想要的。现在我了解了理论方面,但我认为我需要的不仅仅是一个例子来付诸实践。我发现你将网络端与应用程序分开的方式非常有趣,并且是保持轻量级 ViewController 和 MVC 的好方法。
  • 我很高兴,伙计。如果您需要更多帮助,请给我发邮件,我会给您一些示例和更深入的解释等。tanderza@gmail.com
  • @Tander 嘿,伙计,我可以给你发电子邮件给你一些例子,说明你是如何将上述内容付诸实践的,我真的很喜欢你的做法!
猜你喜欢
  • 1970-01-01
  • 2021-05-07
  • 2015-05-06
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2018-09-12
  • 2011-12-13
相关资源
最近更新 更多