iOS开发基础:MVC
来源:互联网 发布:mac office 卸载 编辑:程序博客网 时间:2024/06/05 14:31
MVC模式我们谈得够多了,但总有一些争议,比如RAC说明文档里关于MVC的描述是这样的:
斯坦福大学的iOS公开课第一课:
中文维基百科上MVC条目的配图:
乍一看,以上都是三角形,都描述了Model、View、Controller三者的关系,Controller都处于View与Model的中间位置。
这里再明确一下MVC的基本定义:
MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
- (控制器 Controller)- 负责转发请求,对请求进行处理。
- (视图 View) - 屏幕上显示的UI,响应用户事件,接受用户输入。
- (模型 Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
简单的说,MVC只是定义了一个面向对象的软件系统里,各个对象的角色。
三者概念并不难理解,难点在与这三者的交互关系,上面各方展示的关系里(线条表示),最大的差别在与Model 与 View 的关系,除了斯坦福那幅图,其它都建立了View与Model 之间的联系,无论间接还是直接。实际开发中,给一个TableViewCell 传递一个“Model”,也是常见做法。
但是,这样对吗?
这里我们想一下面向对象设计的目的:
面向对象的重要特性是封装,而封装的目的在于复用
比如一个阅读APP中,图书列表一个典型的TalbleViewCell是这样的:
这时,给这个TableView的Cell传递一个Book的Model对象,是很自然的,而且显得很方便,毕竟Cell要展示的封面图片、书名、简介、作者,Book对象都能提供。
再看另一个APP:
注意到,其实Cell的布局是很相似的
试想一个综合类购物app,同时提供书籍和服装列表,给cell传book还是cloth类,都不合适,而是直接需要图片的传图片,需要文字的传文字:
// 注意这里是伪代码if object is class book cell.image = object.coverImage cell.title = object.titleelse if object is class cloth cell.image = object.image cell.title = object.productName
我们看下苹果官方如何描述mvc三者的关系:
可见,
苹果的定义是View 与 Model 彻底分离,换句话说,这两者并不知对方的存在!
再注意下斯坦福的示意图,View 与 Model 之间是双实线,
考过驾照的童鞋都知道其含义是 不要越界,
只有这样,才能定义出可复用的对象,也符合了面向对象编程的初衷:抽象
MVC是Cocoa 框架的核心,苹果要求任何类,必须是这三种角色之一。
- iOS开发基础:MVC
- IOS开发基础之MVC模式
- IOS开发基础之──MVC模式
- IOS开发基础之──MVC模式
- IOS开发基础之──MVC模式
- 移动开发之iOS基础开发(五)iOS开发中的MVC设计实现
- ios开发之MVC
- iOS开发中的MVC
- iOS开发中的MVC
- 什么是MVC(IOS开发)
- iOS开发之MVC
- iOS开发模式-MVC
- IOS开发教程-01-IOS程序框架认识、XCode基础了解、MVC面向对象设计
- 浅谈iOS MVC 学习基础
- 浅谈iOS MVC 学习基础
- 浅谈iOS MVC 学习基础
- 浅谈iOS MVC 学习基础
- 浅谈iOS MVC 学习基础
- 简单momgodb 增删该查
- 物理层实验1
- my_strcpy
- 找⑨~~
- java中代码的注释和快捷键
- iOS开发基础:MVC
- 毕业前的计划
- C语言多线程的引入
- android事件拦截机制
- Struts2中的拦截器入门
- 初始MFC
- IOS UITextView、UITextField长度限制
- python数据结构学习笔记-2016-10-24-02-使用排序列表实现集合ADT
- 二叉树的顺序实现