iOS设计模式——MVC(Model-View-Controller)
Modol View Controller(MVC)是一种最早的也是最成功的可重用的设计模式,70年代的时候首次在smaltalk编写的程序中成功使用。基于MVC设计 模式,Cocoa整体架构可以划分为三个子系统:Model, View, Controller,我们可以相应的理解为:数据模型,视图和控制器。
Modol View和Controller的角色
要想理解MVC设计模式中每个子系统的角色,我们就需要理解一个应用程序的功能和行为。我们知道一个应用程序通常需要存储数据信息,检索数据信息以及把这些数据信息呈现给用户,同时还要允许用户对数据进行编辑(增删查改等操作)。那么MVC的角色就分别为:
Model: 为应用程序提供独立的,不依赖于View和Controller子系统的数据模型。
View: 以一定的形式像用户呈现数据并允许用户对数据进行操作。理解View的关键是要理解同样的数据可以有不同的呈现方式,可以以列表的形式显示,可以以图片的形式显示,有时根据需求只需显示部分数据。
Controller: 在
Model和View之间加入一个Controller的主要目的就是“去耦”,即消除Model和View之间的耦合性。用户和View交互
时,View会通知Controller在View中有数据发生了更改,而Controller则会将这个数据的改变反应到Model中。
Controller在这个过程中扮演转义数据的角色(因为呈现在View中的数据可能是便于用户阅读的文字或是数字,而存储在Model中的数据可能是
比较高效但不便于直接阅读的二进制或是其他存储方式比如关系数据库,Controller可以承担转化这两种数据形式的职责)。
Controller的去耦作用如下图示(注:本文所用插图来源于书《Cocoa Design Pattern》, Erik M.Buck 和 Donald A.Yacktman著):

第一步,滑动按钮发生变化,发送一个消息给Controller;第二步,Controller发送消息告诉Model按钮位置发生了变化需要更新
数据Value;第三步,Model更新完数据通知Controller;第四步,Controller完成对View中其他需要更新的
View控件的更新,比如上面的文字输入框。
在上面的整个过程可能你会觉得Model和View明明可以直接交互,为什么要引入Controller呢?原因就是,View通常会经常根据用户
需求而发生改变(相信经常和客户打交道的朋友对此感触颇深),而且用户数据格式有时候也会发生改变(比如客户要求数据需要从mysql数据库迁移到
oracle),这样把View和Model分离出来就显得极其重要了。
Cocoa中的MVC
在Cocoa框架中,可以说MVC设计模式被用到了极致。不但整个框架是基于MVC设计的(见下图),而且在更小的范围内也广泛使用了MVC。

Core Data简化了很多应用程序的Model部分的设计;ApplicationKit包含了View, Controller通用的一些类。Foundation提供了对操作系统接口,NSObject基类,脚本支持以及其他特性的访问。
小结
MVC设计模式减少了程序中模块间的耦合性,但是有时候也增加了程序的复杂度。从长远来讲,MVC这样一个清晰的子系统分离设计可以减少系统的维护
开销并且可以很方便的实现系统功能的增强和扩展。另外一个考虑就是,子系统的分离对软件测试工作也带来了很大的方便,比如我们可以直接测试升级了的系统
Model,而不一定非得通过用户界面来测试,因为当通过用户界面测试失败时,我们不知道到底是界面导致的还是Model本身导致的或是两者同时引起的。
再有就是,通常一个系统的View和Model是由不同的团队开发的,这样每个子系统的清晰分离就显得尤为重要了。
iOS设计模式——MVC(Model-View-Controller)的更多相关文章
- What is the difference between Reactjs and Rxjs?--React is the V (View) in MVC (Model/View/Controller).
This is really different, React is view library; and Rxjs is reactive programming library for javasc ...
- 深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)
在DRP中终于接触到了MVC,感触是确实这样的架构系统灵活性不少,现在感触最深的就是使用tomcat作为服务器发布比IIS好多了,起码发布很简单,使用起来方便. 首先来简单的学习一下MVC的基础知识, ...
- Model View Controller (MVC) Overview
By Rakesh Chavda on Jul 01, 2015 What is MVC?Model View Controller is a type of user interface archi ...
- MVC(Model View Controller)框架
MVC框架 同义词 MVC一般指MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一 ...
- MVC模式(Model View Controller)下实现数据库的连接,对数据的删,查操作
MVC模式(Model View Controller): Model:DAO模型 View:JSP 在页面上填写java代码实现显示 Controller:Servlet 重定向和请求的转发: 若 ...
- Model View Controller(MVC) in PHP
The model view controller pattern is the most used pattern for today’s world web applications. It ha ...
- 关于报错:'sharedApplication' is unavailable: not available on iOS (App Extension) - Use view controller based
最近在看Extension相关知识的时候,自己写了个小demo 发现[UIApplication sharedApplication]这个方法敲不出来了, 总是报错:'sharedApplicatio ...
- iOS 容器控制器 (Container View Controller)
iOS 容器控制器 (Container View Controller) 一个控制器包含其他一个或多个控制器,前者为容器控制器 (Container View Controller),后者为子控制器 ...
- iOS9中找不到XXX.dylib 与 is unavailable no availabel on ios (app extension) - use view controller 的解决办法
在 iOS9 中现在找不到 XXX.dylib 了,比如libz.tbd 如果要用到 libz.dylib,可以用下面的办法,来自 Stack Overflow. Go to Build Phase ...
随机推荐
- 7.java.lang.IllegalAccessException
java.lang.IllegalAccessException 没有访问权限 当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常.对程序中用了Package的情况下要注意这个 ...
- Android 屏幕适配方式
适配:即当前应用在相同的手机上面显示相同的效果.适配前需要首先确定当前手机所属像素密度类型(如:xhdpi.hdpi.mdpi等) 像素密度:每英寸上分布的像素点个数,单位(dpi,ppi),利用勾股 ...
- SDL介绍
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成.SDL提供了数种控制图像.声音.输出入的函数,让开发者只要用相同或是相似的代码就可以开发 ...
- poj1862---变形虫(贪心)
题意:两条虫之间碰在一起,质量变为2*sqrt(m1*m2) 求怎么结合,能使最后的一只虫质量最小 分析:如果让按从大到小的顺序依次结合,可以使大的数被开方的次数最多,得到的结果更小 4 3 2 1 ...
- linux系统配置Apache虚拟主机实例
安装apache,php: yum install httpd php 假设VPS的IP是58.130.17.168,有两个域名指向该IP,分别是domain1.com, domain2.com, 修 ...
- 移动开发之fastclick 点击穿透
穿透(点穿)是在mobile各种浏览器上发生的常见的bug.可能是由click事件的延迟(300ms)或者事件冒泡导致 现象:在A页面中有个 btn1<或a标签>,在B页面中有个 btn2 ...
- 加入收藏夹的js代码(求兼容chrome浏览器的代码)
从网上找了加入收藏夹的js代码,但不兼容chrome,不知道有没有兼容chrome的相关代码,希望有知道的告诉一下,谢谢! 代码如下 $("#id").click(function ...
- 在Mac上配置Apache+PHP环境
1.启用Apache/Web共享 打开终端,运行启动Apache命令: sudo apachectl start 然后输入系统密码,运行成功. 关闭命令: sudo apachectl stop 重启 ...
- 前端新人学习笔记-------html/css/js基础知识点(二)
4月7日学到的知识点: 一:<img src="1.png" alt="美女"/> alt是给图片添加介绍,当图片没加载出来时,会直接显示a ...
- ASP.NET MVC 必备知识点杂谈
一 工程结构4个程序集 Microsoft.Web.Mvc --一些可以使用的,不确定的程序包System.Web.Mvc --主程序库下面两个列入3.5的Net框架了System.Web.Abs ...