iOS MVC框架模式

来源:互联网 发布:大型安卓网络手游 编辑:程序博客网 时间:2024/05/01 09:31

//联系人:石虎  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框架模式,还需要很多的业务类,她们往往可以脱离出来,如网络请求。