我想在iphone应用程序中使用Sqlite数据库。我正在阅读的书中的示例让控制器直接调用CoreData对象。
从.NET中的MVC / MVP到我,这类似于在按钮事件处理程序中打开SQL连接。我通常会有一个存储库来处理检索/持久化模型的细节。
1)直接在Controller中使用CoreData功能是否正常?
2)将我的域模型提取到单独的类中,这些类在iPhone上来回转换到持久层并不是一个好主意(关于性能,内存,预期的项目组织等)?
3)创建存储库层是否适用于iPhone?
使用SmallTalk背景Objective-C和iPhone应用程序的MVC方法我期望利用域模型,存储库,IoC等。
那是不现实的?作者和我只是在不同的页面上吗?感谢您的任何意见。
答案 0 :(得分:2)
iPhone SDK确实遵循MVC模式,但也有许多其他模式(委托)。所以它可能没有你提到的其他语言那么严格。回答你的问题:
您将不可避免地从Controller获得对模型的某种访问权限。只要在模型中处理这些操作的实现,那么您就遵循MVC模式。这是由CoreData Framework提供的。所以最后,它是你的DAO,ActiveRecord等。
如果您想添加额外的功能,可以生成Model类(Model.m / h)。但是,CoreData通常会为您即时构建它们。
如果没有.NET背景,我不太明白这一点,但我认为我对你的第一个问题的回答可能是间接回答的。
我无法对你正在阅读的书说话,但最好还是看一些其他的参考资料。查看ADC参考文档中的核心数据简介以及其中一个示例项目 - CoreDataBooks。
答案 1 :(得分:2)
是的,核心数据通常用作模型。如果我理解你正确的说法,你期望在实际的数据存储和控制器之间有一个层。核心数据就是那个层 - 它(有时)是用sqlite实现的,所以你永远不会直接使用sqlite。这是我认为你混淆的根源 - 你不应该在同一个项目中同时使用这两个数据。