0%

记录对MVC的理解

反馈请联系hertz@hertzwang.com,谢谢

Apple官方文档Model-View-Controller

Apple官方DemoMVCNetworking

概述

MVC即Model-View-Controller,是一个复合设计模式,由于一些基本的设计模式组成,这些基本模式一直工作,定义功能分离和通信路径,将整体分为了三个角色Model、View、Controller各司其职

  • Model:数据模型,并具有基本行为能力,例如数据解析
  • View:视图,用于展示和编辑Model中的数据
  • Controller:控制器,将Model绑定到View

组合角色,例如Model ControllerView 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通过UITableViewdata sourcedelegate来控制数据及处理响应事件
  • 观察者模式:View观察Model的状态变化,收到通知后更新外观

用户在View上操作生成事件,Controller接收事件并根据策略处理事件,这个策略可以是更新Model或者更新View,当Model状态变化时通知View更新外观

Traditional version of MVC as a compound pattern

Cocoa MVC vs 传统MVC

Cocoa MVC与传统MVC有一些相似之处,不同于Controller观察Model而不是View,分离了View与Model之间的通信,增强了它们的可重用性。

  • Model:状态变化通知Controller传到View
  • View:在原有的组合模式基础上增加了命令模式
  • Controller:在原有的策略模式基础上增加了中介者模式,在Model与View之间双向协调数据流

Cocoa version of MVC as a compound design pattern

nib中的Cocoa MVC

使用 Cocoa MVC设计一个良好的应用程序,协调控制器通常具有中介控制器,这些控制器存档在nib文件,如图所示:

Coordinating controller as the owner of a nib file

MIT 描述的 Cocoa MVC

Apple将组合模式分为了3个角色,即ModelViewController

Controller拥有MovelView

  • 数据绑定:直接绑定(set)或通过data source来绑定(UITableView)
  • 事件绑定:通过Target-Actiondelegate来绑定(UITableView)、KVO

用户编辑ViewController更新View或者Model

Model状态变化时通知Controller

MIT