我应该在控制器或数据类中下载信息吗?

时间:2014-04-26 10:00:22

标签: ios objective-c uiviewcontroller

我的应用程序从网络服务器下载照片。是从服务器控制器的业务或数据业务下载照片信息?我的意思是我应该在控制器类中下载数据

Photo.title = [self getPhotoInfoFromServer: url]; 

还是数据类?

[Photo getPhotoInfoFromServer: url];

3 个答案:

答案 0 :(得分:1)

您应该将照片下载到数据类,然后将viewControllers下载到数据类可以轻松获取的数据类。其实你应该按照MVC在哪里

M =模态(您的数据类)

C =控制器类

V =查看控制器显示的内容

答案 1 :(得分:1)

我更喜欢使用专用服务器类来实例化模型,并且在控制器中使用:[photoServer getPhotoFromURL:URL][photoServer getPhotoFromURL:URL completion:^(Photo *photo, NSError *error){...}]

为什么要使用专用服务器类?

  • 照片可能来自多个来源,您不想编写许多+[Photo getPhotoFrom...]方法,并且会妨碍Photo类的可重用性和可维护性。
  • 每当服务器实现发生变化时,您只需要修改一个类,即负责服务器的类。 Photo模型仍然没有意识到甚至有服务器,并且不关心服务器实现。这是行动中的principle of single responsibility

为什么要从控制器调用此代码?

  • 服务器访问本质上是异步的,可能会失败。当我们谈论用户反馈时,只有控制器知道如何处理延迟和错误。

答案 2 :(得分:1)

全球观点

UIViewController用于控制视图。它意味着交互(为视图提供良好的数据,并回答查看交互)。

模型/实体可以由独立源创建(除非源本身与您的模型在语义上链接)。无论是从服务器检索的数据还是从本地相机胶卷图片中创建的照片,照片都是照片。

您应该使用自定义DataFetcherController来获取远程数据并将其转换为实例。

示例流程

您的UIViewController subclass需要一张照片列表。它要求PhotoServerFetcherController从服务器获取数据。如果需要,提取器可以查看其缓存并向服务器发出请求。当PhotoServerFetcherController获取数据并将其解析为Photo实体的实例并将其返回给UIViewController时。

数据提取器交互

最好是创建自己的FetcherController界面(@protocol关键字)。你可以处理2个异步回调:success包含数据,failure包含错误(连接错误输入?)。

您可以通过多种方式实现这一点,1对1互动的主要2种模式为delegateblock callbacks