Contents
  1. 1. Model
  2. 2. View
  3. 3. Controller
    1. 3.1. Controller and View
    2. 3.2. Controller and model
    3. 3.3. view and model
  4. 4. MVC优点
  5. 5. MVC缺点

其实之前个人对于MVC的设计模式只是一个很懵懂的认识,自从看了iOS官方文档的解释和standford公开课的课件,就发现原来在iOS中是这么回事

Model

encapsulate data and basic behaviors,What your application is (but not how it is displayed )

功能:封装App要用到的数据并定义相关的逻辑操作,Model和其他model存在相关relation(一对一,一对多,多对多等),数据要进行持久化(存在文件或者数据库中来进行重用),model只关心数据,只定义相关数据和操作,不去关心用户界面。

communication: 用户操作通过controller来更改Model,Model的相关数据的更改来通知Controoler去更新View

View

present information to the user (your controller’s minions)

功能:在应用程序中展示用户可以看见的界面以及相应相关用户操作,View视图的更新是通过Controller操作的,当然了视图是可以缓存数据来提升程序性能,视图应该是可复用和可配置化的,因此UIKit中提供了大量的View object,诸如TableView,ScrollView

Controller

tie the model to the view(How your model is presented to the user UI logic)

功能:是视图和模型的中间者,视图的更新都是控制器从model中取出数据进行更新

  1. mediating controller 中介控制器
  2. coordinating controller 协调控制器

SmallTaclk中的MVC

  • Composite: View object有多个视图嵌套组成
  • Strategy: controller object给一个或者多个view object实现策略,view object委托controller来处理相关的接口行为
  • Observer:

Alt text

Cocoa中得MVC
Alt text

Cocode跟传统的MVC设计方式最大的不同在于把View和Model中得通信删去了,view不能观察model的数据状态的改变来更新自己的view,原因主要在于View和model设计成高度复用的Object,去掉view和object的联系就是内聚解耦的过程
其中官网是这么解释的:

  • 如果在程序中使用绑定机制,如果视图能直接观察到模型中的属性,那么NSController及其子类的优势(selection and placeholder)不会体现出来
  • 如果不使用绑定机制,对于一个已经存在的视图必须子类化来观察model的改变

最后来看一下stanford这张图
Alt text

这张图把iOS中model,view,controller的关系阐述的真心简洁明了,鞭辟入里啊!!

Controller and View

  1. controller通过outlet来控制view上面的object
  2. view通过target-action来controller来响应响应的事件
  3. controller来设置自己作为view的委托,实现view中控件对应的事件protocol
  4. controller总是view的data source,用Model信息来更新view或者根据view来收集model信息

Controller and model

Model主要是通过广播机制(KVO)来通知controller自身信息的更改

view and model

两者不应该有任何关系,The model should be UI independent.(理由前面已经叙述了)

MVC优点

  • 代码重用(多个视图可以共享一个模型,主要因为我们已经把数据和业务logic从表示层分开了)
  • 更好地定义接口
  • 良好的扩展性

MVC缺点

完全理解MVC模式不是特别容易(特别对于我等工程经验不足的人,有时候还是只能从表面意义上体会他的好处)

Contents
  1. 1. Model
  2. 2. View
  3. 3. Controller
    1. 3.1. Controller and View
    2. 3.2. Controller and model
    3. 3.3. view and model
  4. 4. MVC优点
  5. 5. MVC缺点