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原则背后的思想是将一个应用切分成不同的部分,每个部分解决一个单独的关注 ...
随机推荐
- 不同车型 不同起步价不同费用的问题(switch语句)
#include "stdio.h" #include "math.h" main() { int a; float meet,b; printf(" ...
- c#基础语言编程-正则表达式应用
引言 在不同语言中虽正则表达式一样,但应用函数还是有所区别,在c#语言中使用Regex. 可以通过以下两种方式之一使用正则表达式引擎: 通过调用 Regex 类的静态方法. 方法参数包含输入字符串和正 ...
- Android(java)学习笔记205:网易新闻RSS客户端应用编写逻辑过程
1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,bl ...
- hadoop集群环境搭建之安装配置hadoop集群
在安装hadoop集群之前,需要先进行zookeeper的安装,请参照hadoop集群环境搭建之zookeeper集群的安装部署 1 将hadoop安装包解压到 /itcast/ (如果没有这个目录 ...
- C# 内存管理优化畅想(一)---- 大对象堆(LOH)的压缩
我们都知道,.net的GC是不会压缩大对象堆的,因为其时间开销不可接受,但这是以大对象堆产生大块碎片为代价的,如果以后要分配的大对象比最大的碎片还大,那么即使它比所有碎片的总大小要小,也是无法在不扩展 ...
- 学点bootstrap
- Asp.net Mvc4 基于Authorize实现的模块访问权限
在MVC中,我们可以通过在action或者controller上设置Authorize[Role="xxx"] 的方式来设置用户对action的访问权限.显然,这样并不能满足我们的 ...
- jdbc mysql - Column count doesn't match value count at row 1.
该句的意思是,insert操作的SQL语句里列的数目和后面值的数目不一致.比如说, String sql = "insert into t_aqi(city_name, cur_date, ...
- 常用的dos命令之简略总结
Dos常用命令 一.基础命令 1 dir 无参数:查看当前所在目录的文件和文件夹. /s:查看当前目录已经其所有子目录的文件和文件夹. /a:查看包括隐含文件的所有文件. /ah:只显示出 ...
- IOS常用开源库
转自:http://www.csdn.net/article/2013-06-18/2815806-GitHub-iOS-open-source-projects-two/1 1. AFNetwork ...