我的问题主要与Objective C中的层次模型的架构或设计模式有关。对于后台我的应用程序相对简单。通常,它与Web服务进行对话,以检索和显示用户可以遵循的内容。当有人关注某事时,他们所关注的事物在概念上存储起来,以便稍后通过发布到Web服务进行访问。
我想了解逻辑应该用于管理Web服务与用户遵循的事物组之间的交互的位置。
例如,是否适合使用名为MyStuffModel
的数组属性创建类似followedThings
的模型对象,该属性包含对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
或者,我是否应该拥有MyStuffModel
对象并通过直接从视图控制器调用我的API客户端来管理对我的Web服务的调用?
根据您的经验,需要采用哪种方法?或者还有另一种方式吗?
答案 0 :(得分:6)
我会在模型中完成所有网络连接。以下是所有部分如何组合在一起的概述
NSNotificationCenter
通知控制器新信息可用使用Apple's Push Notification Service(APNS)可让您的服务器在新数据可用时通知您的应用。这有助于减少网络流量,因为您的应用不必经常轮询服务器以确定何时有新数据可用。如果您不熟悉APNS,那么您需要了解该服务的一个非常重要的功能(因为它似乎是许多新用户的混淆点)。该服务仅保证发送最后一条消息。因此,例如,如果服务器为特定设备获取10个新项目,并在设备关闭或在隧道中时向设备发送10个通知,则该服务仅保证提供第10个消息。关键是您无法使用APNS将任何数据从服务器发送到设备,因为某些消息可能会丢失。您应该只使用APNS通知设备数据可用。
答案 1 :(得分:0)
我总是创建模型类(和接口,不知道是否适用于ObjectiveC)。 在许多情况下,该模型是数据库后端的视图。
您的模型类应隐藏数据库访问权限并提供简单的界面,例如使用addNewFollower
方法。然后,此方法应该(可选地进行健全性检查)并将其持久保存到数据库后端。
此方法允许您轻松替换数据库集成,而无需触及服务层。例如,使用内存模拟数据库进行测试。
答案 2 :(得分:0)
我总是为模型创建简单的“哑”对象,因为它们对数据进行了建模,仅此而已。如果您要进行网络/ api调用,我将创建一组单独的类,这些类严格处理API调用,并将您的模型用作交换数据。混合数据和功能对我总是很麻烦。
编写一个干净,可重用,可测试和可靠的API客户端,该客户端可以处理错误,并行/串行调用,日志记录等,需要大量的代码,这些代码实际上应该与其他应用程序层分开。数据就是数据,保持数据干净,简单。
另一件事是,某些端点返回的数据并不总是完全符合在那1个模型中定义的所有数据。
我也不会把它放在控制器中,我个人总是创建一组专门用于API调用的不同类,这些类也会抛出自己的异常,处理序列化/反序列化等。