最近我一直在阅读MVC模式并希望将其应用到我的iPhone开发中。但是,模式似乎有很多变化,我不确定它应该如何应用。
据我所知,视图将通知控制器已执行的任何操作,控制器将依次更新数据模型(如果需要)。数据模型将在数据发生更改时通知视图,然后视图会相应地更新数据显示。
在此基本模型中,控制器仅具有数据模型的知识。但是,我似乎无法弄清楚如何在我的iPhone应用程序中使用这种设计。
以下页面提供了模式的替代版本,其中控制器同时了解数据模型和视图,并且模型和视图之间的所有通信都通过控制器执行。它似乎也表明模型和视图可以访问控制器。我是否正确建议数据模型通过某种形式的通知(通知或KVO)与控制器交互,并且视图通过操作与控制器交互?
这第二个模型是否正确?
http://www.bogotobogo.com/DesignPatterns/mvc_model_view_controller_pattern.html
非常感谢,
丹尼
答案 0 :(得分:6)
我发现Paul Hegartys对iOS中MVC的解释非常有帮助。 see his Stanford iTunes U video。 MVC从第22分钟开始。
修改强>
视频的链接并没有像预期的那样带您到那里。它是 1。 Cocoa Touch,Objective-C,Tools和MVC简介(2010年9月21日)
答案 1 :(得分:2)
MVC已存在很长时间,因此模式存在许多变化(或错误引用)。虽然,我见过的大多数MVC实现的概念都大致相同。
我将专注于Apple如何定义MVC。可以在Cocoa Design Patterns指南和SDK站点下载的示例代码(MVCNetworking示例)中找到。
使用iOS,您通常会拥有模型和ViewControllers(它们是控制器和视图的合并角色)。
另外,Martin Fowler在GUI Architectures中有一些很棒的MVC。
答案 2 :(得分:1)
iOS开发非常注重MVC模式。
通常使用viewControllers和模型完成。视图在Interface Builder中构建,分配给控制器,模型部分从其他地方检索。
我想说,对于Cocoa-Touch来说,模式的第二个“版本”是最能描述通常情况的版本。
MVC背后的想法是模型和视图是可重用的,但控制器通常适合手头的问题。 对于iOS开发也是如此,特别是如果您使用界面构建器。
视图通过actions / delegates连接到viewController,模型通过KVO通知或控制器提取新数据来广播其更改。
Apples开发人员门户网站提供了大量代码,您应该首先查看其中的一些代码。让你的眼睛和思想调整到寻找MVC模式,你会看到他们不断使用它,代表模式在顶部,以提供更好的抽象事件
答案 3 :(得分:1)
在我看来,第二个更好。模型和视图应完全分开。如果视图从模型接收通知,则视图将依赖设计模型。通过在这里放置控制器,创建了紧密耦合的循环依赖。 最后,每个部分都不能独立开发,分而治之的策略是不可能的。
我对一般情况的建议:
在iOS中,UIView是一个完全被动的视图。在大多数情况下,所有主要变异总是由UViewController在外部完成。模型部分应该完全按照自己的意愿实现。 (或者你可以将模型集成到控制器中,如果它足够小,但我不推荐它)
在一些大型UIView中,使用了子尺度MVC模式。分形!