有关MVC设计模式 #DF
模型(Model)、视图(View)、控制器(Controller) —— MVC是 Cocoa 中的一种行为模块,并且也是所有 Cocoa 设计模式中使用最多的。在程序中按照它们的角色来分类这些对象并且鼓励你的基础代码也按照这个来划分。
这三种角色是:
模型:这是一种暂时保存你程序数据和定义如何操作它的对象。一个例子,在你的程序中 Album 类就是一个模型。
视图:这种对象是控制模型里的数据如何显示出来的,用户也可操作这些对象;事实上,包含所有的 UIView 和他们的子类。在你的程序中视图是 AlbumView 类。
控制器:控制器是一个中介者协调所有的工作。他使数据从模型传出来然后显示在视图上,监听事件,在必要的时候操作数据。你能猜到哪个类你的控制器吗?对了,它就是 ViewController。
在你的程序中一个好的设计模式的实现意味者所有的对象都在这些群组中。
下图很好的描述了视图和模型之间的通信过程:

当有数据发生改变的时候模型通知控制器,然后控制器更新视图数据。 反过来,当用户在视图执行一些操作后,视图会通知控制器,如果有需要或是要取回请求数据,控制器也会更新模型或者。
你可能想我为什么不能丢掉控制器,在同一个类里实现视图和模型,这样看起来更简单。
归根结底,这是为是分离代码和提高代码的可重用性。理想状态下视图应该完全从模型中分离出来。如果视图不依赖一个特殊的模型来实现,那么另外一个模型就可以重复利用这个视图显示一些其它不同的数据。
举一个例子,在将来某一天你想在你的音乐库中加入一些电影或者一些书,你可以继续使用原来的 AlbumView 视图来显示这个电影或者图书对象。此外,如果你想创建一个新项目,这个项目中的一些东西跟音乐专辑有关,你可以很简单的拿来重用 Album 类,因为它不依赖于其它任何视图。这就是 MVC 的精髓所在。
如何使用 MVC 模式
首先,你要保证在你的项目中任何一个类都有一个控制器,一个模型,一个视图,一个类中的函数不能有两种作用。到目前为至,你已经完成了一项很棒的工作,创建了一个 Album 类和一个 AlbumView 类。
第二步,根据这些方法的作用你应该创建三个文件夹,来存放不同类别的代码,每种类型一个文件夹。
在菜单上选择 File\New\Group (或者按 Command+Option+N) ,创建名称为 Model,重复上面的动作,创建 View 和 Controller 文件夹。
现在拖动 Album.h 和 Album.m 文件到 Model 文件夹。拖动 AlbumView.h 和 AlbumView.m 文件到 View 文件夹,最后拖动 ViewController.h 和 ViewController.m 文件到 Controller 文件夹中。
如果没有其它的文件漂在外面,你的项目看起来已经非常棒了。显然你还可能有其它的文件夹和类,但是你程序的核心内容应该包含在这三个分类中,这样你的文件就已经组织好了。
有关MVC设计模式 #DF的更多相关文章
- AngularJS_01之基础概述、设计原则及MVC设计模式
1.AngularJS: 开源的JS框架,用来开发单一页面应用,以及数据操作频繁的场景:2.设计原则: ①YAGNI原则:You Aren't Gonna Need It! 不要写不需要的代码! ②K ...
- 谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式
作为一名java工程狮,大家肯定经历过很多面试,但每次几乎都会被问到什么是MVC设计模式,你是怎么理解MVC的类似这样的一系列关于MVC的问题. [出现频率] [关键考点] MVC的含义 MVC的结构 ...
- Java Web开发中MVC设计模式简介
一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条 ...
- MVC设计模式与三层架构
三层架构分别是:表示层(Web层).业务逻辑层(BLL层)和数据访问层(DAL层). (1)表示层负责: a.从用户端收集信息 b.将用户信息发送到业务服务层做处理 c.从业务服务层接收处理结果 d. ...
- 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销
第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...
- mvc设计模式和mvc框架的区别
Spring中的新名称也太多了吧!IOC/DI/MVC/AOP/DAO/ORM... 对于刚刚接触spring的我来说确实晕了头!可是一但你完全掌握了一个概念,那么它就会死心塌地的为你服务了.这可比女 ...
- MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)
设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计 ...
- MVC设计模式(持续更新中)
MVC设计模式--->英文全称为: model(模型) View (视图) Controller(控制) MVC是一种设计思想.这种思想强调实现模型(Model).视图(View)和控制 ...
- iOS中MVC设计模式
在组织大型项目的代码文件时,我们常用MVC的思想.MVC的概念讲起来非常简单,就和对象(object)一样.但是理解和应用起来却非常困难.今天我们就简单总结一下MVC设计理念. MVC(Model V ...
随机推荐
- 为什么说DI解耦
为什么说IOC/DI(控制反转/依赖注入)降低耦合 public class HomeController : Controller { private readonly IStudentRepons ...
- css 快速入门 系列 —— 浮动
浮动 以 mdn float 文档 为基础,逐一介绍浮动的本质.浮动的诸多特性.清除浮动以及块格式化上下文(bfc). 概念 当一个元素浮动之后,它会被移出正常的文档流,然后向左或者向右平移,一直平移 ...
- Java基础(八)——IO流3_对象流
一.对象流 1.序列化与反序列化 序列化:将内存中的Java对象保存到磁盘中或通过网络传输出去. 反序列化:将磁盘文件中的对象还原为内存中的一个Java对象. 用途: (1)将对象保存到物理硬盘:比如 ...
- 前端后端通信初步尝试(javascript - flask)
在某项目中,需要使用python flask做后端功能开发,web提供功能入口. 此时需要使用Ajax通信. 由于以前从未接触过网络传输,记录了一些基础知识. 资料参考<HTML5+CSS3+J ...
- HiSql 实现case语法操作 新一代无实体ORM框架
HiSql 实现case语法操作 在SqlServer,Oralce,Hana,PostGreSql,MySql 这些数据都支持SQL case语法,平常在实现业务开发中也会常用到,那么HiSql对于 ...
- HttpRunner_参数化进阶
一.获取返回包数据 在提取参数时,当 HTTP 的请求响应结果为 JSON 格式,则可以采用.运算符的方式,逐级往下获取到参数值:响应结果的整体内容引用方式为 content 或者 body,如上 ...
- react中antd+css Module一起使用
antd 和 css modules 不能混用,针对antd的css 单独写一条loader的规则,不开启 css modules. 使用 exclude 和 include 配置参考(https:/ ...
- Golang实现集合(set)
package set package set import ( "bytes" "fmt" "sync" ) type Set struc ...
- asyncio异步编程
1. 协程 协程不是计算机提供,程序员认为创造 协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术,其实就是一个线程实现代码块相互切换执行.例如: def func1(): ...
- 解惑rJava R与Java的高速通道
解惑rJava R与Java的高速通道 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒. ...