//联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄
1. MVC 的概念
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,注意她是一种框架模式, 而不是设计框架
2. MVC 的优点
MVC设计模式是用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
3. MVC之间的联系
耶鲁大学iphone 视频课程上的截图
由图分析iphone的mvc的主要特点
a。controller是核心:controller 可以和View和model主动通信
b。view是界面元素,分为两个部分来理解:一是界面元素需要的数据部分,二是界面自身状态的变化阶段。
1. View的功能就是显示界面元素不做逻辑处理,故view没有必要改变model数据,因此不可以和model通信
2.View 通过点击事件, 进行人机交互,因此 view可以和controller直接通信,通信方式为以下几种:
2-1:通过动作-目标模式,即action,把view中的某个动作通过消息的方式映射到controller上,实现通信(黄色箭头,红色箭靶),即View是controller的一个属性, 因此通过action,控制器可以控制其他属性。
2-2:通过delagate代理模式,把界面自身状态的变化,如didxxx,willxxx,shouldxxx等,通过消息的方式映射到controller上,实现通信(黄色长线带有多箭头),如View把action 封装,虽然是controller的属性,但是controller不能直接添加逻辑处理,因此需要实现delegate协议,或者不同controller的交互也需要使用delegate。
2-3:通过datasource的模式,把界面自身数据的状态和变化,如count,data等,通过消息的方式映射到controller上,实现通信(黄色长线带有多箭头),最经典的就是常见的UITabelView View类。
3.虽然我们也可以通过KVO或者notification的方式使view的某些消息定制投射到controller上,但是我并不主张如此,因为这就等于将一部分处理逻辑放到了view里,这对mvc结构来说,是一个破坏。只是如果确是必要的话,也是可以考虑使用的。
c。model是数据模型,初学者很容易把model和controller混为一起,而不把他们独立开来来编写代码 。为了更容易重用和修改,建议还是独立出来比较好,这也是mvc结构的本质。
1.model不可以和view直接通信(黄色双实线)。
2.model一般不会和controller直接通信,在和controller的关系中,model是处于被动通信的地位,controller可以直接和model通信,而model往往通过kvo机制和notification的方式把自身的变化投射给controller(model的黄色发射塔,contrller的黄色接收塔)。
4. MVC 内部功能的实现
View:1. 布局UI :就是将需要显示的界面显示到手机上
2. 监点击事件:通过动作-目标模式,delagate代理模式让控制器来处理逻辑
3. 实现dataSource: 将模型数据注入到View中,以显示View
Model:1. 实现数据的格式化。
2. 利用notification || KVO 构造方法,以和Controller通信, 监听数据的变化
Controller:因为控制器本身有一个View的属性 因此controller需要做View的事情
1. 将subView 添加到controller的View上
2. 实现subView action || delegate 协议, 监听事件 && 实现dataSource 以展示subView
3. 进行原始数据的加载 如应用HTTP协议加载后台数据,将原始数据注入到数据模型。
5. 其他
对于MVC框架模式,还需要很多的业务类,她们往往可以脱离出来,如网络请求。