抽象解析对象?

时间:2013-01-14 00:59:07

标签: ios parsing model abstraction

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

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

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

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

任何提示/想法/评论?

2 个答案:

答案 0 :(得分:3)

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

基本上我已经创建了一个名为NPDictionaryRepresenting的协议,类可以符合这些协议,以指定如何将它们转换为字典或从字典初始化。

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

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

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

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

如果有人对这种方法有任何意见,我很乐意听到。

答案 1 :(得分:3)

我意识到这是一个老问题,但我正在忙于一个提出同样问题的项目,所以我想我会发表评论。首先,我认为您确定了这一点,并尽量避免将代码与Parse紧密耦合。

我决定采用的路线是为我的模型类使用Protocols(接口),底层实现是Parse对象 - 使用Parse subclassing feature;我将这与使用工厂类相结合,以从大多数应用程序代码中分离对象创建和实现细节。这可能看起来有点矫枉过正,并且需要预先提供一些额外的代码,但是,我相信它会在测试中带来好处,如果有时间来改变我访问后端服务的方式。

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