应用程序从服务器提取数据(通常是 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;
(当然,我在这里省略了很多细节,比如要获取哪篇博文,但这只是为了展示一种方法)。
还有其他方法吗?如何将服务器数据与本地模型分离?