反馈请联系hertz@hertzwang.com,谢谢
Apple官方文档Model-View-Controller
Apple官方DemoMVCNetworking
概述
MVC即Model-View-Controller,是一个复合设计模式,由于一些基本的设计模式组成,这些基本模式一直工作,定义功能分离和通信路径,将整体分为了三个角色Model、View、Controller各司其职
- Model:数据模型,并具有基本行为能力,例如数据解析
- View:视图,用于展示和编辑Model中的数据
- Controller:控制器,将Model绑定到View
组合角色,例如Model Controller、View Controller
- Model Controller:模型控制器,主要关注Model层控制,“拥有”该Model,主要职责是管理Model并与View通信,例如
NSDocument
自动处理与保存文件相关的操作 - View Controller:视图控制器,主要关注View层的控制,”拥有”该View,主要职责是管理界面并与Model通信,实现根据Model显示View的相关处理,例如
NSWindowController
传统的MVC
在最初的概念(Smalltalk)中,由于组合模式、策略模式和观察者模式组成,View与Model有通信
- 组合模式:View实际上是一组嵌套View的组合,按照设定的层次结构显示,这些View可以是组合视图(UITableView)也可以是单个视图(UIButton),任意View都可以被用户编辑和显示
- 策略模式:Controller为一个或多个View实现策略,View只管展示(视角方面),并委托Controller去决策所有View特定的接口行为,例如Controller通过UITableView的data source和delegate来控制数据及处理响应事件
- 观察者模式:View观察Model的状态变化,收到通知后更新外观
用户在View上操作生成事件,Controller接收事件并根据策略处理事件,这个策略可以是更新Model或者更新View,当Model状态变化时通知View更新外观
Cocoa MVC vs 传统MVC
Cocoa MVC与传统MVC有一些相似之处,不同于Controller观察Model而不是View,分离了View与Model之间的通信,增强了它们的可重用性。
- Model:状态变化通知Controller传到View
- View:在原有的组合模式基础上增加了命令模式
- Controller:在原有的策略模式基础上增加了中介者模式,在Model与View之间双向协调数据流
nib中的Cocoa MVC
使用 Cocoa MVC设计一个良好的应用程序,协调控制器通常具有中介控制器,这些控制器存档在nib文件,如图所示:
MIT 描述的 Cocoa MVC
Apple将组合模式分为了3个角色,即Model、View、Controller
Controller拥有Movel和View
- 数据绑定:直接绑定(set)或通过
data source
来绑定(UITableView) - 事件绑定:通过
Target-Action
、delegate
来绑定(UITableView)、KVO
用户编辑View时Controller更新View或者Model
Model状态变化时通知Controller