IOS 之MVC
MVC模式最早由Trygve Reenskaug在1978年提出[1] ,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。 ---(易做图)
MVC 提出后,得到了广泛的应用。 MFC,J2EE, Java Swing,.NET Perl Ruby on Rails,Python,JavaScript,PHP,ActionScript3 等都有各自实现。对于IOS开发,同样用到MVC。下面就MVC在IOS 开发中的一些情况做做简单的介绍。
模型—反应你的程序是什么. 但它不关心如何展示
控制器—你的模型如何展示给用户. 它关心UI逻辑
视图—渲染数据, 展示给用户并接收用户反馈。
MVC的所有内容就是在对上述三者的分工及通讯。
1) Controller 可以直接和 model,view 通讯
一般用法是controller直接引用model,view 实例对象。
2) Model 和 view 不应该直接通讯
3) View 与 controller 之间的通讯
a) View接收一些用户事件,但并不涉及业务处理。所以一般是通过protocol-delegate方法,把用户事件传回给控制器处理
b) View 不能拥有数据,但view的展示需要数据。一般也是通过协议去获取。例如UITableView,其获取数据的方式就是通过定义UITableViewDatasource 这个协议去获取。
4) Controller 一般会作为数据源(而不是模型)。
同样,参考UITableViewController,其实现了 UITableViewDataSource, 而不是model实现该协议。
5) Controller 并要时需解析/格式化 model返回的数据给View
View 不关注业务逻辑。 Model 不关注view。这就导致model返回数据,可以在某些情况下并不适于view直接展示。因此,这时controller 一般需要先针对view的需要处理好数据,然后才交给view。
另一典型情况是系统错误信息的处理。系统报错信息五花八门,但不是每一条信息都适合直接给用户展示。因此,controller 这时也是需要对错误信息先进行处理,然后才能放行,交给view。
6) Model 与 controller 通讯?
Model 应该是跟UI 独立的。如果model 有信息需要更新或者其他任意事件需要反馈,一般使用消息/通知模式。
例如一些后台处理程序:邮件刷新,数据统计等… 用户并不关心(无UI触发),但又需要提示用户。这时可以在相应的controller设立消息接收器,而model,则在需要触发响应时,通过通知的方式,把信息发放出去。而它自己,其实是不理会消息的后续的情况的。
下面是从斯坦福教程中截图的一副MVC的关系图,很是简洁明了。
补充:移动开发 , IOS ,