我应该从我的模型或控制器调用我的API吗?

nat*_*203 4 design-patterns objective-c ios

我的问题主要与Objective C中的层次模型的架构或设计模式有关.对于后台我的应用程序相对简单.通常,它与Web服务进行对话,以检索和显示用户可以遵循的内容.当有人关注某事时,他们所关注的事物在概念上被存储,以便稍后通过发布到Web服务来访问.

我想建议逻辑应该去哪里管理Web服务和用户遵循的事物组之间的交互.

例如,是否适合创建一个模型对象,例如MyStuffModel一个名为followedThingshold的AThingModel对象的数组属性?如果是这样,是否可以在模型中编写和执行从Web服务等刷新的逻辑?

潜在的代码示例

@interface MyStuffModel : NSObject

@property (nonatomic, strong) NSArray *followedThings;

- (void)refreshAllFollowedThingsFromWebService;

@end

@implementation MyStuffModel

- (void)refreshAllFollowedThingsFromWebService
{
    //call my API client (built on AFNetworking), get back a response
    //populate followedThings, notify a view controller, etc

}

@end
Run Code Online (Sandbox Code Playgroud)

或者,如果我没有MyStuffModel对象并通过直接从视图控制器调用我的API客户端来管理对我的Web服务的调用?

根据您的经验,需要采用哪种方法?或者还有另一种方式吗?

use*_*109 6

我会从模型中做所有的网络.以下是所有部件如何组合在一起的概述

  • 控制器告诉模型要遵循哪些项目
  • 该模型将该信息转发给服务器
  • 当服务器有新信息时,它使用APNS通知模型
  • 模型从服务器请求新信息
  • 数据传输完成后,模型用于NSNotificationCenter通知控制器新信息可用
  • 控制器从模型中读取信息
  • 控制器使用新信息更新视图

使用Apple的推送通知服务(APNS),您的服务器可以在新数据可用时通知您的应用程序.这有助于减少网络流量,因为您的应用不必经常轮询服务器以确定何时有新数据可用.如果您不熟悉APNS,那么您需要了解该服务的一个非常重要的功能(因为它似乎是许多新用户的混淆点).该服务仅保证发送最后一条消息.因此,例如,如果服务器为特定设备获取10个新项目,并在设备关闭或在隧道中时向设备发送10个通知,则该服务仅保证提供第10个消息.关键是您无法使用APNS将任何数据从服务器发送到设备,因为某些消息可能会丢失.您应该只使用APNS通知设备数据可用.