我正在开发一个基本上是服务器端 REST API 客户端的应用程序。
该应用程序严重依赖服务器数据(有点像 Facebook 所做的)。
在我的应用程序中,我有一个 ServerAPI 类来管理与服务器的所有交互。它基本上充当“模型-视图-控制器-存储”模式中的“存储”。应用程序的其余部分使用此类的单例实例来访问数据。
因此,例如,如果我的一个视图控制器需要一个文章列表,它会调用:
[[ServerAPI sharedAPI] fetchArticlesWithCompletion:^(NSArray *articles){
// Do something with the new articles.
}];
这样,应用程序就不会关心文章是如何获取的。据它所知,它们是从本地文件而不是服务器中获取的。
这一切都很好。
现在的问题是我想添加某种缓存。环顾四周后,听起来 Core Data 可能是这项工作的最佳工具(但我绝对愿意接受其他建议)。
我发现 AFIncrementalStore(AFNetworking 的 NSIncrementalStore 子类)看起来很有希望。但是根据我(目前有限)对 NSIncrementalStore 的理解,应用程序(视图控制器)仍然直接与 NSFetchRequests 和 MOC 交互以获取数据。
我想保留我当前的 API(ServerAPI 单例)并简单地在“幕后”插入 Core Data,这样应用程序的其余部分就不会知道细节。基本上,应用程序不应该知道数据被缓存,或者它是如何被缓存的,它应该只是请求数据并获取数据。
所以我的问题是,实施这个的好策略是什么?有没有人做过这样的事情?值得付出努力吗?我知道 Core Data 本身就是一种抽象存储的方式,因此拥有第二层抽象可能是矫枉过正。但是我一直在想如果有一天我决定使用 NSCoding 而不是 Core Data 将对象存储到磁盘的情况。我通常不喜欢让我的所有课程都知道实现细节(在这种情况下使用核心数据而不是不使用核心数据)。
我对哪种方法最好感到有些不知所措。我不想在从长远来看可能没有意义的解决方案上投入太多时间。
一般来说,直接在代码中使用 Core Data API 有意义吗?或者最好在处理服务器和本地数据的自定义 DataManager 后面抽象出所有这些细节。
想法?