MVC
从刚开始学习iOS的时候就知道MVC设计模式了。
简单来讲,不就是 模型(model) - 视图(view)-控制器(controller)么。
但是!为什么到今天我才发现!我竟然在项目中很少使用它!反省。。
充分理解MVC设计模式,能够帮助你更合理的组织程序。当然,你不用它也可以写出程序,结果就会想我一样,丢失掉层次,混乱掉view。
在屏幕上,你能看到的,就是view;而数据,就是model;前两者之间的联系,就是controller。
那MVC的意义在于哪里?
在传统的web系统设计中,数据库的访问、业务逻辑和UI设计混淆在一起,这样虽然直观,但一旦需求有所改动,对日后的维护带来很多不便。为了解决这个问题,人们提出了分层的架构思想。
分层架构模式:
"将解决方案的组件分隔到不同的层中,每一层中的组件应保持内聚性,各层保持松散耦合。" 分层模式是最常见的一种架构模式。在web应用系统开发中,比较流行三层架构(表现层、业务逻辑层、数据访问层)。
现在把MVC和分层架构对照一下,我觉着很有点类似。MVC的目的是把Model和view实现代码分离,从而使同一个程序表现出不同的形式。Controler使model和view保持同步,一旦两者有一个改变,另外一个也会改变。所以,MVC的设计思想也是分层。
那MVC中,相互之间是怎么交互的呢?
Controller对Model:只能是Controller发起,而Model只能响应。Model定义API接口,而Controller通过导入头文件或者接口来操作Model。
Controller和View:Controller通过定义outlet,来改变view。而用户在view做的改变,想要传递给controller,有三种方式:
1.Target-action。简单来讲,按钮触发事件,- (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents)controlEvents; 在Controller中addTarget,然后屏幕上做出action,这样发送给对应的target。
2.Delegate。Controller把自己设置成View的delegate,这样,如果view想更多的操作,就向controller发送delegate信息,然后controller 会做出相应的协调处理。
3.Datasource。view是不能够保存数据的,当view需要数据,它就会提出申请,请求别人把数据给它。常用的如UITableViewDataSource
Model对Controller: Model对Controller直接并不能毫无限制的进行交互流。当Model中数据改变,而Controller需要知道这些改变的时候,有两种方式:
1.Notification。一旦Model某些东西发生变化,就通知Controller,我这里改变了。
2.KVO(Key-Value Observing)。关注Model某个数据(Key)的对象可以注册为监听器,一旦Model某个Key的Value发生变化,就会广 播给所有的监听器。
MVC就先总结到这里。突然又出来了新的问题:delegate、通知、KVO好像功能差不多啊有么有。具体有什么区别?该怎么选择?
先占个位置,研究总结了再贴链接。
参考:http://blog.csdn.net/ericxxxx/article/details/7760960
http://www.cnblogs.com/syncg/archive/2013/01/13/2858099.html
浙公网安备 33010602011771号