iOS的MVC模式

原创 2016年08月29日 19:09:49

MVC(Model View Controller)

                      模型(model)-视图(view)-控制器(controller)


模型对象:模型对象封装了应用程序的数据

视图对象:视图对象是应用程序中用户可以看到的对象

控制器对象:在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器充当媒介



MVC的优点

      (一)、低耦合性

  视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。


(二)、高重用性和可适用性
  随着技术的不断进步,现在需要用越来越多的方式来访问应用程序。MVC模式允许你使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的命令是改变视图层的实现方式,而控制层和模型层无需做任何改变。


(三)、较低的生命周期成本
  MVC使开发和维护用户接口的技术含量降低。

 

(四)、可维护性
  分离视图层和业务逻辑层也使得应用更易于维护和修改。


(五)、有利于软件工程化管理
  由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。



图中有几条线把这三部分划分开,有黄线,虚线,和白色的实线。我们把它们想象成路标。你可以看到,在M和V之间有两条黄线,这表示什么呢?它意味着你不能 穿越这黄线,任何一个方向都不行,即M和V完全分离。在图的上部,你可以看到白色的虚线,它意味着你可以自由的穿越它,只要是安全的。那白色的实线呢?它代表你可以穿越,但你必须要买票,或者交点过路费。

首先, 我们来看C和M之间的绿色箭头,这箭头的方向就代表着“发起对话”的方向,也就是说,发起对话的是C,而做出回答的是M。C可以问M各种各样的问题,但M 只是回答C的问题或要求,它不可以主动的向C要求什么。还记得虚线是畅通无阻的意思吧,所以,C知道M的所有的事情,如果用代码来说明这件事情,就是 说,C可以导入M的头文件或是M的接口(API)。因为C可以通过M的API,所以它就可以肆无忌惮的向M要求这要求那了。

我们再来看看另外的一个绿色箭头,它是在C和V之间,和前一个绿色箭头的意义一样,它代表C可以直接地向V进行交流。你可以想想,C要把V放到屏幕 上,并设置V的属性,告诉它们什么时候从屏幕上消失,把它们分成组等等。如果C不能自由的向V发号施令的话,程序的显示将会多么的困难,所以,C可以毫无 限制地向V说话。

可能你已经注意到了,这个箭头上还有outlet(输出口),outlet可以看作是从C指向V的指针,它在C中被定义。outlet给我们提供了很大的 方便,它使我们在C的内部就可以轻松准确地向V施令。C可以拥有很多的outlet,可以不止一个,这也使它可以更高效的和V进行交流。


那M和V之间可以交流么?还记得黄线的意思么?完全不可以通过,所以我们是不允许M和V进行交流的。这是因为我们不希望这三部分之间有过多的交流,你想想,假如V在显示时出现了问题,比如有一个图形没有显示出来,我们就要去查找错误,因为C可以和V交流,M也可以和V交流的话,我们就要去检查两个部分。 相反的,只有C可以和V交流的话,在出错时,我们就只需要去C那里查找原因,这样查找错误不就很是简单了么?所以,我们不允许M和V之间有直接的联系,这 也是在它们两之间有两根黄线的原因。 总结下来也就是以下三点:

(1)、Model和View永远不能相互通信,只能通过Controller传递。

(2)、Controller可以直接与Model对话(读写调用Model),Model通过Notification和KVO机制与Controller间接通信。

(3)、Controller可以直接与View对话,通过outlet,直接操作View,outlet直接对应到View中的控件,View通过action向Controller报告事件的发生(如用户Touch我了)。Controller是View的直接数据源(数据很可能是Controller从Model中取得并经过加工了)。Controller是View的代理(delegate),以同步View与Controller。

我们接下来讨论V是如何向C发送信息的。V对C的交流有三种不同的方式:

第一种我们称为目标操作(target-action)。

它是这样工作的,C会在自己的内部“悬挂”一个目标(target),如图中的红白相间的 靶子,对应的,它还会分发一个操作(action,如图中的黄色箭头)给将要和它交流的视图对象(可能是屏幕上的一个按钮),当按钮被按时,action 就会被发送给与之对应的target,这样V就可以和C交流了。但是在这种情况下,V只是知道发送action给对应的target,它并不知道C中的 类,也不知道它到底发送了什么。target-action是我们经常使用的方法。

 第二种方式我们叫做委托(delegate)。

有时候,V需要和C进行同步,你知道,用户交互不仅仅是什么按按钮,划滑块,还有很多种形式。好了, 让我们来看看图中的delegate黄色箭头,你发现箭头上又分出了四个小箭头:should,did,will,还有一个没标注的。绝大部分的 delegate信息都是should,will,did这三种形式。和英文意思相对应,should代表视图对象将询问C中的某个对象“我应该这么做 么?”,举个例子,有一个web视图,有人点击了一个链接,web视图就要问“我应该打开这个链接么?这样做安全么?”。这就是should信息。那 will和did呢?will就是“我将要做这件事了”,did就是“我已经做了这件事”。C把自己设置为V的委托(delegate),它让V知道:如 果V想知道更多的关于将如何显示的信息的话,就向C发送delegate信息。通过接受V发过来的delegate信息,C就会做出相应的协调和处理。还 有一点,每个V只能有一个delegate。

第三种方式就是数据源(datasource),

V不能拥有它所要显示的数据,记住这点非常重要。V希望别人帮助它管理将要显示的数据,当 它需要数据时,它就会请求别人的帮助,把需要的数据给它。再者,iphone的屏幕很小,它不能显示包含大量信息的视图。看图中的datasource箭 头,和delegate类似,V会发送cout,data at信息给C来请求数据。

对于不同的UIView,有相应的UIViewController,对应MVC中的C。例如在iOS上常用的UITableView,它所对应的Controller就是UITableViewController。



版权声明:本文为博主原创文章,未经博主允许不得转载。

实际案例讲解iOS设计模式——MVC模式

本文通过一个实际的案例,讲解如何将一个都写在ViewController中的代码,使用MVC使用分别写到Model、View和Controller之间,以减轻Controller的代码量,减少各个模块...
  • nhwslxf123
  • nhwslxf123
  • 2015年11月08日 01:36
  • 2063

iOS中MVC设计模式的优缺点

编程以来就一直被灌输MVC设计模式,具体MVC使用到底好在哪里 又有那些不足之处,可以通过下面的文章得以了解。 一、mvc原理   mvc是一种程序开发设计模式,它实现了显示模块与功能模块的分离...
  • Shave_Kevin
  • Shave_Kevin
  • 2015年03月16日 10:07
  • 2407

实际案例讲解iOS设计模式——MVC模式

转载:http://blog.csdn.net/nhwslxf123/article/details/49703773 MVC模式是iOS编程中提到的最多次的设计模式,也是使用最频繁的设计模式之...
  • u012361288
  • u012361288
  • 2016年06月17日 17:44
  • 5001

iOS MVC开发模式的优缺点

转载地址:http://www.mamicode.com/info-detail-989164.html         事情从一般开发中一个massive viewController说起,一个巨...
  • baidu_31170383
  • baidu_31170383
  • 2015年10月21日 19:13
  • 2874

iOS 基于MVC设计模式练习UITableView使用 —— HERO博客

iOS 基于MVC设计模式练习UITableView使用。
  • hero_wqb
  • hero_wqb
  • 2016年03月07日 21:40
  • 1562

iOS中MVC、MVVM、MVP几种模式小结

一、MVC模式的优缺点  优点: 1、开发人员可以只关注整个结构中的其中某一层; 2、可以很容易的用新的实现来替换原有层次的实现; 3、可以降低层与层之间的依赖; 4、有利于标准化; 5、...
  • li_shuang_ls
  • li_shuang_ls
  • 2015年12月04日 16:38
  • 1924

(iOS开发总结)MVC模式

一、MVC 模式MVC,即模型-视图-控制器(Model-View-Model),是软件开发中应用甚广的一种设计模式。其用意是将数据与视图分化,利用模型数据控制视图的显示,但两者的交互由控制器控制。在...
  • Chong_son
  • Chong_son
  • 2016年08月18日 22:26
  • 374

iOS中的MVC和MVP的区别

在开发ios应用时,相信很多同学遇到和我一样的情况,虽然项目刚开始构架时自认为MVC层级分的特别明确,但最终往往是一个Activity有上千行代码,而且业务逻辑和UI的显示混杂在一起,导致后续项目的维...
  • touch929
  • touch929
  • 2017年01月06日 15:53
  • 746

iOS架构模式-揭秘MVC,MVP,MVVM和VIPER

iOS架构模式揭秘MVC,MVP,MVVM和VIPER在IOS中使用MVC感觉很奇怪?对切换到MVVM存在疑虑?听过VIPER,但是又不确定是否值得尝试?继续阅读,你会找到上面问题的答案,如果没有你想...
  • cuibo1123
  • cuibo1123
  • 2016年02月17日 17:35
  • 3758

关于MVC设计模式耦合度与解耦相关技术点总结

一 摘要在深入探究MVC设计模式之前,首先要弄清这样几个问题1.什么是MVC设计模2.为什么要使用MVC设计模3.MVC设计模存在的问题4.什么是耦合性5.如何去解耦针对这些问题,我们来一一分析,解释...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2016年06月01日 10:51
  • 2619
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS的MVC模式
举报原因:
原因补充:

(最多只允许输入30个字)