2014-03-31 59 views
0

我已经为请求创建了AFHTTPSessionManager的子类别。我有一个模型类来解析我的传入JSON。iOS获取请求的最佳做法

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

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

+0

嘿卡洛斯,这里有很多人愿意帮忙,但请确保你已经展示了你已经尝试过的,没有发挥作用的,以及你的问题的背景。还要确保你已经阅读[**如何问](http://stackoverflow.com/questions/how-to-ask),然后编辑你的问题,以更好地吸引人们的时间和精力。就目前来看,给你一个有限的答案是很难的,答案可能完全是基于观点的。 – brandonscript

+0

我相信他的问题更多关于OOP原则,然后实际执行。 –

+0

你真的在使用RestKit吗?应用程序的总体概况和它使用的数据/同步是什么? – Wain

回答

2

在开始我的项目之前,我有过同样的问题。我这样做了:

Base Class使用AFNetworking完成所有取/放HTTP请求。 Web service class对基类一无所知 - 只是如何使用它,我在这个意义上做了泛型的方法。 Data class构建了我需要的url /参数。

通过这种方式,应用程序的其余部分对网络层一无所知。数据类知道如何将URL /参数放在一起并请求网络呼叫。而已。 Web服务类知道如何根据提供给它的信息从数据类中进行该调用,并且基类知道如何提出请求并获得响应。

然后,我将响应交给基础XML/JSON类,该类开始分析从基础Web服务类获取的数据。一旦数据被解析后,它将被存储到使用正确模型对象的数据类中。从那里 - 应用程序只是要求数据类的数据。

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

在坚果壳我构造这样的:

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

一旦完成了原始调用的类通知完成了http请求和解析,它就会向数据提供`Data class'。

这种类别及其责任的分离,基于上述原因很有效。改变应用程序的一部分,不需要大量重写许多类。在两个,大部分。

我希望这能让你走向正确的方向。

+0

很好的解释。我正在开发一个类似的项目,但只是使用NSURLConnection。我在两个抽象层次上做了类似的事情。任何时候我需要添加新的功能,我的连接类永远不会改变,我只需要调整我的新方法的协议和特定的功能。强烈推荐Tander的方法。 – Inertiatic

+0

这就是整个想法。当你需要扩展时 - 你的网络层保持不动。唯一需要改变的时机是改变库或改用NSURLConnection。 :-) – Tander

+0

非常感谢Tander,这正是我一直在寻找的。现在我理解了理论方面,但我认为我需要的不仅仅是一个例子,而是将其付诸实践。我发现你将网络与应用程序分离的方式非常有趣,并且是保持ViewControllers和MVC轻量级的好方法。 – CarlosGz