核心数据的模型控制器抽象

时间:2012-03-16 15:41:15

标签: ios cocoa-touch model-view-controller core-data

在了解Core Data时,我注意到(在Xcode的模板中)Apple如何直接在视图控制器中使用查询类。这似乎是糟糕的MVC(直接在视图控制器内部具有数据库访问逻辑)。是否有必要将这些类型的操作抽象到一组单独的类中,这些类从数据库中获取数据并将其传递回调用它的视图控制器?

编辑 -

所以,为了清楚起见,当我说“各种行动”时,我特别指的是CRUD操作。虽然如果你对所谓的“模型控制器”会做的其他事情有所了解,我会有兴趣听到它们。

2 个答案:

答案 0 :(得分:2)

这是一个意见问题,通常是模板是最简单的工作示例。例如,很难让模板分出多个文件。

是的,就个人而言,我通常会衍生出一个单独的NSManagedObject子类。我喜欢拥有一个包含所有自动生成的东西的_MySubclass对象,然后让模型实际引用具有基于模型的业务逻辑的MySubclass(如果愿意的话,你可以使用mogenerator或其他方法来执行此操作)。或许将其视为“模型控制器”和“视图控制器”是另一种方式。

答案 1 :(得分:0)

这是一个非常好的问题,答案可能取决于您的情况。也许架构纯粹主义者会坚持使用单独的模型控制器,这种方法有很多好处。但是,有时候当我在做一个简单的视图时,我发现自己使用了键值。当事情变得更复杂时,例如,当为Mac和iOS编写相同的模型时,使用单独的模型控制器将允许您重用大量代码。当你必须分歧时,Obj C Categories是一种非常干净的方式来扩展功能而不会增加很多开销。我个人赞成类别而不是广泛的子类化。

自NSFetchedResultsController发布以来,我的模型类更加精简。这有很多细微差别,经验将帮助您为您的应用程序提供最佳解决方案。我还发现,预先编写单元测试可以帮助您解决问题并验证您的设计,或者将您送回绘图板:)