iPhone的MVC结构

114 篇文章 0 订阅
100 篇文章 0 订阅

这是一张耶鲁大学iphone视频上的一张图,也被很多讲解iPhone的mvc设计结构的人所常常引用,足见其经典之处。

另外,Android也采用同样的MVC结构,但是我还是觉得iPhone将将MVC结构用到了极至。



1.什么是mvc

首先还是要搞懂概念的,所谓mvc结构就是数据模型,UI界面和控制逻辑各自独立的一种设计模式。

M,即model,代表数据模型模块

V,即view,代表UI界面模块

C,即controller,代表控制逻辑

那为什么要把这三种模块各自独立呢?其优点和缺点是什么呢?

之所以独立,与软件的发展以适应用户不断变化的需求是分不开的,每次语言的进化或者某个设计模式的涌出,无非是为了解决两个根本的问题,一是提升软件工程的开发速度,而是降低软件工程的开发成本。其中增加代码的重用性,保持良好的扩展性一直是很重要的课题。

mvc结构,也是为此而出现的,把各个模块独立,结构变得更清晰,更易于阅读,维护。而各个模块独立,重用性也增加,如果有新的需求或者变动只需更改相关的模块就可以达到效果。但是mvc结构为了使各个模块独立,也增加了很多代码来使工程代码符合这一个结构的要求,从而导致代码量增加,各模块间互相通讯相比于直接调用,性能也有所损失,这也是不争的事实。但是相对于其能快速适应用户需求变化,软件重用性大大增加的优点,以及硬件发展速度日新月异相比,这些缺点便显得微不足道了。


2.由图分析iphone的mvc的主要特点

a。controller是核心:

     1.controller可以和view直接通信,通信方式是 outlet(绿色箭头)。

     2.controller也可以和model直接通信,通信方式通常是通过直接的对象引用(绿色箭头)。

b。view是界面元素,分为两个部分来理解:一是界面元素需要的数据部分,二是界面自身状态的变化阶段。

    1.view不可以和model通信(黄色双实线),虽然使用kvo或者notification的方式可以实现,但是建议一定不要这么做,这是对mvc结构的严重的破坏。

    2.view可以和controller直接通信,通信方式为以下几种:

                2-1:通过动作-目标模式,即action,把view中的某个动作通过消息的方式映射到controller上,实现通信(黄色箭头红色箭靶)。

                2-2:通过delagate代理模式,把界面自身状态的变化,如didxxx,willxxx,shouldxxx等,通过消息的方式映射到controller上,实现通信(黄色长线带有多箭头)。

                2-3:通过datasource的模式,把界面自身数据的状态和变化,如count,data等,通过消息的方式映射到controller上,实现通信(黄色长线带有多箭头)。

   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的黄色接收塔)。


而本文转自:http://blog.csdn.net/likendsl/article/details/7706637,进行了一下重新编辑和小的修改,与大家共享。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值