11

我想在我的应用程序中使用 Parse (parse.com)。Parse 使用 PFObject 模型。我想在我的代码中使用我自己的模型(这样它不依赖于解析)。如果可能的话,我想设计我的应用程序,以便我可以尽可能无缝地将 parse 替换为另一个云服务。

这是一个好主意吗?抽象模型存储以使我的应用程序中没有(或最少)Parse 代码痕迹的最佳方法是什么?

也许使用适配器设计模式将解析对象映射到我自己的对象?这应该是一个独立的类还是模型逻辑的一部分?

如果有人尝试过这样的事情,我想听听你的想法。我应该直接在我的代码中使用解析模型吗?或者也许是一个基于解析对象生成我的模型的单例工厂?

任何提示/想法/评论?

4

2 回答 2

3

我找到了相对干净的方法来管理这个。

基本上,我创建了一个协议,称为NPDictionaryRepresenting哪些类可以遵循,以指定如何将它们转换为字典或从字典初始化。

@protocol NPDictionaryRepresenting <NSObject>
- (NSDictionary *)dictionaryRepresentation;
+ (id)objectWithDictionaryRepresentation:(NSDictionary *)dictionary;
@end 

我需要存储在 Parse 中的每个模型都将符合这一点并实现自己的自定义行为。该协议是通过使用字典抽象出来的,因此它不以任何方式依赖 Parse。

然后我实现了一个 NPNetworkAdapter 基类来处理所有网络存储。我还实现了一个继承自 NPNetworkAdapter 的 NPParseNetworkAdapter 类。这是唯一了解 Parse 的类。它的接口处理符合 NPDictionaryRepresenting 的对象。解析网络适配器能够通过提取我的对象的字典表示来创建 PFObjects。相反,它能够获取 PFObjects 并通过使用字典实例化它们来返回我自己的模型。

这种实现的缺点是它不能很好地处理对象关系(但我正在研究它)。

如果有人对这种方法有任何意见,我很想听听他们的意见。

于 2013-01-17T20:09:00.213 回答
3

我意识到这是一个老问题,但我正忙于一个提出完全相同问题的项目,所以我想我会发表评论。首先,我认为您很好地识别了这一点,并尝试避免将您的代码与 Parse 耦合得太紧。

我决定采取的路线是Protocols为我的模型类使用(接口),底层实现是 Parse 对象 - 使用Parse 子类化功能;我将其与工厂类的使用结合起来,将对象创建和实现细节与我的大多数应用程序代码分离。这可能看起来有点矫枉过正,并且确实需要一些额外的代码,但是,我相信它会通过测试和改变我访问后端服务的方式来获得回报。

对我来说,另一种选择是使用刚刚包装 PFObjects 的包装类。然而,就我而言,包装类只是愚蠢的委托类,没有Protocols为测试提供额外的好处,所以我坚持使用这种Protocols方法。

于 2013-09-15T19:14:21.103 回答