IOS 之MVC

来源:互联网 发布:电子图书软件下载, 编辑:程序博客网 时间:2024/05/16 16:14

MVC模式最早由Trygve Reenskaug1978年提出[1] ,是施乐帕罗奥多研究中心Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。 ---(维基百科)

MVC 提出后,得到了广泛的应用。 MFCJ2EE Java Swing.NET Perl Ruby on RailsPythonJavaScriptPHPActionScript3等都有各自实现。对于IOS开发,同样用到MVC。下面就MVCIOS开发中的一些情况做做简单的介绍。

 

模型反应你的程序是什么.但它不关心如何展示

控制器你的模型如何展示给用户.它关心UI逻辑

视图渲染数据展示给用户并接收用户反馈。

 

MVC的所有内容就是在对上述三者的分工及通讯。

 

1) Controller 可以直接和 modelview通讯

 一般用法是controller直接引用modelview实例对象。

 

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的关系图,很是简洁明了。

 

 

另附两张不同MVC模型间的联系的图片

 

原创粉丝点击