【发布时间】:2013-01-14 02:34:41
【问题描述】:
应用程序从服务器提取数据(通常是 JSON 字符串)是相当常见的场景。然后将这些数据解析并转换为原生类,如 NSString、NSArray、NSDictionary 等。
然而,大多数时候,我们希望使用自定义模型来表示这些远程数据。
例如,如果我们要提取博客文章的 JSON 数组,我们希望将它们映射到 BlogPost 模型对象中:
// BlogPost.h
@interface BlogPost: NSObject
@property NSString *title;
@property NSString *body;
@property NSDate *dateCreated;
@property NSArray *comments;
@end
您将“JSON”模型与原生模型解耦的方法是什么?
我经常发现自己在模型本身中编写了一个自定义初始化程序,它接受一个字典(通常来自 JSON 提要)。
例如:
// BlogPost.h
+ (BlogPost *)blogPostWithJSON:(NSDictionary *)jsonDictionary;
然后我必须跟踪服务器上使用的密钥并将它们映射到我的属性。
我总是觉得这样做有点不安,因为应用程序中的模型不应该真的知道服务器上使用了哪些密钥。
我是否应该将这个 JSON 到对象的映射移到另一个类中?也许是工厂?还是我的网络管理员应该直接创建现成的对象并将其返回给我?
也许是这样的:
// NetworkManager.h
- (void)getBlogPostWithCompletion:(void (^)(BlogPost *blogPost))completionBlock;
(当然我在这里省略了很多细节,比如要获取哪篇博文,但这只是为了展示一种方法)。
还有其他方法吗?如何将服务器数据与本地模型解耦?
【问题讨论】:
标签: ios oop networking