IOS设计模式之三:MVC模式
IOS设计模式之三:MVC模式
模型-视图-控制器
这个模式其实应该叫做MCV,用控制器把model与view隔开才对,也就是model与view互相不知道对方的存在,没有任何瓜葛,他们就像一个团队里吵了架的同事,如果有项目需要他俩来参与,那么最好有第三者来管理他俩之间的沟通与协调。这个第三者就是控制器。
既然管理,那么姑且就把这个控制器提做项目经理吧,这样的话让他俩干啥就得干啥。
让我们来欣赏一下这张图(摘自斯坦福公开课的课件):

先撇开那些乱七八糟的箭头单看他们之间的分界线,view与controller、model与controller之间的线是虚的,而model与view之间的是双黄线,考过驾照的知道越过这个线意味着什么吧。
控制器与视图之间的大部分连线都可以在Xcode中通过按住ctrl来连接。例如outlet,例如delegate。有了这些连线,他们之间的沟通算是畅通无阻了。
1)用户在view上的操作可以直接告诉控制器让控制器去响应
2)view需要的代理也可以指派给控制器让控制器去完成
3)view需要的数据源也需要控制器来提供
总之,控制器很忙,因为它非常被动。
控制器还需要一个角色的参与:model
顾名思义,模型。我觉得使用asp.net里mvc的domain来描述比较好理解,领域。例如你要开发一个图书管理系统,模型里描绘的就是图书的书名、售价、作者,谁借走了,几号借走的,一切关于这个应用领域的数据。
我们可以给模型一个简单的定义:它描述了一个应用所有需要抽象出来的数据结构和这些数据之间的关系,还有他们获取数据需要通过的途径(本地的、远程的)等。
有了模型,控制器想啥时候去拿数,想怎么拿都行。
仔细观察上面的图,有控制器到model的箭头,没有model到控制器的箭头。因为模型不需要知道控制器的存在,这样可以减少耦合,提高代码复用可能性。把你定义好的model挪到别的项目中,还可以使用。
但是问题来了,当model数据已经更新了,被修改了,怎么通知相关的控制器?注意model上方有个天线,高端!之所以使用无线的,是因为model不知道更改要发给谁,但是model可以广播,model的观点:谁关心我的更改让谁收听去,我对谁收听了我不感兴趣。
广播的方式有两种:Notification 和 KVO(都是设计模式,本系列接下来会详述)
好了,他们几个之间的关系基本有个概念了。mvc模式就是这样,把原本杂乱无章的类,分为三堆,严格监管,按规则行事。
还是那句话:
说到底一切都是为了使类之间的耦合性更松散。好的代码应该对扩展开放,对修改关闭。
IOS设计模式之三:MVC模式的更多相关文章
- iOS 设计模式之工厂模式
iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...
- Android 设计模式之MVC模式
说到Android设计模式的MVC模式,估计很多人都是比较熟悉了,这里深入了解一下MVC到底是怎么回事,以ListView为例子讲解. 一.深入理解MVC概念 MVC即Model-View-Contr ...
- python 设计模式之MVC模式
一.简单介绍 mvc模式 the model-view-controller pattern mvc模式是一个运用在软件工程中的设计模式.mvc模式脱离了以前简单的web服务设计逻辑,将开发,测试 ...
- Python设计模式之MVC模式
# -*- coding: utf-8 -*- # author:baoshan quotes = ('A man is not complete until he is married. Then ...
- iOS:使用MVC模式帮ViewController瘦身
如何给UIViewController瘦身 随着程序逻辑复杂度的提高,你是否也发现了App中一些ViewController的代码行数急剧增多,达到了2,3千行,甚至更多.这时如果想再添加一点功能或者 ...
- IOS设计模式之三(适配器模式,观察者模式)
本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...
- 设计模式-14 MVC模式
一 MVC设计模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式,它是一个存在于服务器 表达层的模型,它将应用分开,改变应用之间的高度耦合 MVC设计模式将 ...
- 【设计模式】MVC模式
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO.它 ...
- python的设计模式之MVC模式
模型-视图-控制器模式 关注点分离(Separation of Concerns,SoC)原则是软件工程相关的设计原则之一.SoC原则背后的思想是将一个应用切分成不同的部分,每个部分解决一个单独的关注 ...
随机推荐
- Android开发ImageView控件缩放图片
首先还是最基础的ImageView控件如何显示图片: <ImageView Android:id="@+id/imgView" ...
- 网络子系统43_ip选项预处理
//选项格式: // 1.type中指示该选项在分片时是否需要被拷贝 // 2.ptr从1算起,1为type的位置 // 3.len不包括type字段,其余都包括(len,ptr,选项内容) //ty ...
- ExtractNewFolderPath
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syst ...
- linux系统启动
在本文中,我们按电源按钮简要叙述,以便能够登录到系统,在此期间,系统和计算机硬件是如何一起工作.既作为自己整理知识的摘要,有可能linux0绍,高手请略过. 一般来说linux的启动能够分成三个阶段: ...
- MySQL的优化点总结---通过计算多种状态的百分比看MySQL的性能情况
1 读写比例: show global status like 'com_select'; 获得服务器启动到目前查询操作执行的次数:show global status like 'com_inse ...
- linux安装总结(亲测)
一:磁盘分区情况 NTFS,FAT32 这是两种常用的磁盘格式 windows7自带的磁盘工具也可以分出上面的格式,用软件也可以.但是FAT32最大的复制文件进去的限度时4G. EXT3只能用软件才能 ...
- C# 霍夫曼二叉树压缩算法实现
知道有的人比较懒,直接贴全部代码. 一开始一次性Code完了压缩部分代码.只调试了2,3次就成功了. 一次性写150行代码,没遇到什么bug的感觉还是蛮爽的. 写解压代码,才发现压缩代码有些细节问题. ...
- WPF Binding值转换器ValueConverter使用简介(一)
WPF.Silverlight及Windows Phone程序开发中往往需要将绑定的数据进行特定转换,比如DateTime类型的时间转换为yyyyMMdd的日期,再如有一个值是根据另外多组值的不同而异 ...
- js正则实现用户输入银行卡号的控制及格式化
//js正则实现用户输入银行卡号的控制及格式化 <script language="javascript" type="text/javascript"& ...
- Android布局管理器(贞布局)
贞布局有FrameLayout所代表,它直接继承了ViewGroup组建 贞布局为每个加入其中的组件创建一个空白区域(一帧),所以每个子组件占用一帧,这些贞都会根据gravity属性执行自动对齐 贞布 ...