iOS-MVC设计模式

MVC设计模式

概述:Model-View-Controller(MVC),即模型-视图-控制器。它将软件系统分成三大部分:  Model,View,Controller三个部分通过某种机制通信。

MVC的职能

  M(model)

    应用程序的核心,用于处理应用程序数据逻辑部分

  V(View)

    处理应用程序数据的显示,通常依据Model创建

  C(Controll)

    处理用户的交互

    从视图读取数据,控制用户输入,并向模型发送数据

MVC之间的通信

图解(出自斯坦福大学cs193课程的课件)

这个模式其实应该叫做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模式就是这样,把原本杂乱无章的类,分为三堆,严格监管,按规则行事。

还是那句话:

说到底一切都是为了使类之间的耦合性更松散。好的代码应该对扩展开放,对修改关闭

此图解段转自 http://www.cnblogs.com/limlee --- GeekLion

Controller与Model之间的通信

  Controller可以主动向Model发起会话

  Model职能被动地回复Controller发起的会话,不能主动请求Controller

Controller与View之间的通信

  Controller可以完全操控View,因为Controller要把View显示在屏幕上

  View可以向Controller发送消息,因为View要将用户的动作传递给Controller

  Model与View之间无法直接通信

总结:

Controller对Model——通过API

Controller对View ——通过Outlet

View对Controller ——Target-action,Delegate,Datasource

Model对Controller——Notification,KVO

View与Controller之间的通信方式

目标操作(target-action)

    Controller内会悬挂一个目标(target),并将一个操作(action)给将要和它交流的视图对象,如图解中的target与action

    如,为View中的某个按钮添加一个监听事件,当按钮被点击时就执行相应的处理

委托

    为视图中的某个视图设置代理,当控件被操作时发送相应的代理消息,执行相应的代理 方法,实现View与Controller的通信

如,tableView的代理

数据源

    Controller通过数据源将View需要的数据传递给View,实现Controller与View的通信

时间: 2024-12-24 12:25:14

iOS-MVC设计模式的相关文章

iOS中MVC设计模式

在组织大型项目的代码文件时,我们常用MVC的思想.MVC的概念讲起来非常简单,就和对象(object)一样.但是理解和应用起来却非常困难.今天我们就简单总结一下MVC设计理念. MVC(Model View Controller)模型(model)-视图(view)-控制器(controller):MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据你可以分别用柱状图.

闲话iOS的MVC设计模式

模式是经验知识的复制应用.MVC设计模式在不同的开发平台有不同阐述和应用.目前在网路上可以搜索出java版本.c++版本.c#版本的,也有ios版本的.我这里也发布这篇关于MVC设计模式的文章,用我的缘走你的路. 写在前面的话 若然不用设计模式,难道就不能开发设计程序了吗?不然.那么设计模式给我们带来什么呢?如果你不学习别人总结出来的设计模式,就能轻松.快捷.真正地解决问题,而且还乐意再来一次,我相信你不需要别人的设计模式了.如果??某些问题,让你很挠头,让你不敢再回首,不妨借助别人总结出来的设

iOS开发设计模式之MVC

本片文章介绍MVC设计模式及其在iOS开发中的使用技巧 什么是MVC设计模式 MVC是设计模式的起源,也是在软件工程领域使用最多的一种设计模式. MVC即:Model模型.View视图.Controller控制器 模型: 在模型对象中封装数据并定义操作数据的特定逻辑行为 模型可以表示复杂的数据结构,可以是屏幕上显示的数据.等待处理的数据等 视图: 使用视图对象向用户展示信息 视图对象可以响应用户的操作,并懂得如何将自己展现在屏幕上 视图对象通常从应用程序的模型对象中获取数据用以展示. 可以跟一个

iOS-MVC设计模式

MVC的设计模式就本质就时把类的功能进行分类设计,斯坦福大学的老头子在iOS课程中说过,View不关心数据实体,view通过代理通知Controller自己被操作了,让Controller来决定程序的运行,如逻辑跳转或者页面跳转:Model不关心UI,Model负责数据实体的管理如从网络上获取数据实体,一般设计为单例模式,对数据实体的增加删除修改,而这些操作Model通过通知中心通知Controller,Controller通过监听对应的通知来调用对应的操作方法来在主线程更新UI.View和Mo

转---MVC设计模式详解

MVC(Model View Controller)模型(model)-视图(view)-控制器(controller):MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据你可以分别用柱状图.饼图来表示.C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,从例子可以看出MVC就是Observer设计模式的一个特例.MVC如何工作MVC是一个设计模式,它强制性

如何理解MVC设计模式

MVC是一种架构模式 MVC(Model View Controller) M-模型(model) V-视图(view) C-控制器(controller): MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据你可以分别用柱状图.饼图来表示.C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,从例子可以看出MVC就是Observer设计模式的一个特例. MV

iOS编程开发笔记1——OOP,iOS,MVC

OOP,iOS,MVC 何政达 [前言]:写这篇文章的目的是总结一下这几天学到的有关iOS编程的有关知识点.主要分三部分:OOP的设计理念:iOS的构成:MVC的具体应用. Part I :OOP 说起OOP,大家都知道是什么--面向对象程序设计(Object-OrientedProgramming).但是我们为什么要使用这样的一种设计模式来进行我们的程序设计呢?记得一开始学习编程的时候是小学六年级,当时学习的是BASIC:上了初中以后学习PASCAL语言:上了高中开始学习C语言:到了大学之后逐

OS 设计模式:MVC – 设计模式中的国王

原文:<iOS 设计模式系列:MVC – 设计模式中的国王> 模型(Model) 视图(View) 控制器(Controller) (MVC) 是 Cocoa 中的一种行为模块,并且也是所有 Cocoa 设计模式中使用最多的.在程序中按照它们的角色来分类这些对象并且鼓励你的基础代码也按照这个来划分. 这三种角色是: 模型:这是一种暂时保存你程序数据和定义如何操作它的对象.一个例子,在你的程序中 Album 类就是一个模型. 视图:这种对象是控制模型里的数据如何显示出来的,用户也可操作这些对象:

iOS——MVVM设计模式

一.典型的iOS构架——MVC 在典型的MVC设置中,Model呈现数据,Vie呈现用户界面,而ViewController调节它两者之间的交互. 虽然View和View Controller是技术上不同的组件,但他们总是手牵手在一起,成对的,View不能和不同的View Controller配对,反之亦然.View和View Controller之间的关系如下图所示: 在典型的MVC应用里,许多逻辑被放在ViewController里.它们中的一些确实属于View Controller,但更多

IOS MVC模式初探

MVC设计模式 在进行IOS程序开发的时候,若对MVC设计模式不了解的话,是很难做出良好性能的程序.现将作者本人对于MVC设计模式的一些 粗浅看法记载余下,希望能对读者有所帮助. MVC设计模式 在MVC设计模式中,对象被分为三组,分别扮演着模型,视图,控制器.而我们的任务则是确定对象或类应该属于这三组中的哪一组. (1)模型: 在模型对象中封装数据和基本行为(操作数据的逻辑). 模型对象可以复用,因为它表示的知识适用与特定的问题领域. (只要加载的是包含有应用程序永久信息的数据,就应该将其放入