浅析MVC设计模式

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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值