您的位置:首页 > 移动开发 > IOS开发

iOS设计模式之MVC设计模式浅谈

2015-09-19 09:37 393 查看

本文之所以称为是MVC设计模式的浅谈,是因为MVC设计模式的概念并不是很复杂,但是如果要合适恰当地使用到项目中去的话,那么是需要很丰富的经验,和较为深刻的理解的。本文的另一个目的是将自己对MVC设计模式的理解记录下来,本文在以后会不断地更新。

1、MVC设计模式的概念
M:model,被叫做模型,本质上是APP所需要的数据,对这个model类的处理又会有很多的技巧和方法(例如对经典的plist文件结构使用字典转模型的技巧)
V:view,是APP上显示的视图,在MVC设计模式中,经常将view类从controller中抽取出去,创建一个类,单独进行view内部的逻辑和布局操作,但是写出的view是个空的架构,没有数据,只会提供一些接口去接受数据,使得在controller中创建的view对象,可以通过view类暴露的接口接受到经过controller处理过的model中的数据。虽然view的数据是来源于model的,但是实际上,在view类和model类之间是不会进行通信的。这也正是MVC设计模式的目的所在:将视图和数据分离,降低耦合性,使得同一种数据可以通过不同的视图来表示和展示出来。
C:controller,视图控制器
(1)、由于在iOS的MVC中,view和model类是不能进行相互通信的,所以controller便承担了中介的作用。那么一定存在controller与view和model之间的交流和通信,controller就与model和view建立着联系,保持着数据的更新。
(2)、其次,view类所做的逻辑只是局限于view内部的布局和展示,而view在视图控制器的view(或者是view的父类)中是怎么展示的view是不知道的。这时候就需要controller来建立这种逻辑和布局。
(3)、最后,由于model类中构建的数据是最原始的,在controller中view所获得的数据往往是需要进过处理的,那么这个处理操作就是由视图控制器来完成的。

2、MVC设计模式的交互
我们可以将MVC设计模式形象化为三个三角形,分别代表着model、controller和view,最上面的是controller,左边的是view,右边的 是model,当然,这三个三角形之间会有很多的方式。在cocoa和cocoa touch中的MVC是不允许model和view之间进行通信的,所以这两个类相对独立,最关键的是model和view与controller之间的交互:
(1)model与controller之间的交互

从controller到model:通过导入model类,然后创建model属性,进行操作
从model到controller:通过iOS中提供的广播机制,包括了Notification和KVO(key value observing)模式
(2)view和controller之间的交互
从controller到view:通过导入view类,然后创建view属性,进行操作。此外,还可以通过addTarget方法为拿到的属性添加方法,配合addTarget中提供的动作参数(常用的是点击和值改变)为view添加事件。
从view到controller:通过delegate和dataSource,在创建的view类中自定义delegate和dataSource并且提供合适的代理和数据源方法,这样controller实现了协议就可以进行信息的交流了

3、MVC的使用场景
设计模式的终极目的都是为了使得项目更加容易维护和编写,所以如果我们抱着为了使用设计模式而将设计模式用到项目中的话,那么效果当然不会很好。对于MVC设计模式来说,在iOS中,由于编写的是以UI为基础的APP,所以MVC十分常用,但是如果一个很简单的界面,几乎是不超过200行代码的,就没有必要去使用MVC设计模式,如果去刻意使用MVC设计模式,反而会增加项目中类的数量,不但没有减少复杂度,还增加了不少。所以我们需要使用MVC设计模式是在项目很大,而且以后还需要不断地更新和维护的,使用MVC模式,将视图和数据分离出来,以后的修改就变得十分简单和迅速
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: