MVC入门

来源:互联网 发布:腓骨长肌腱滑脱 知乎 编辑:程序博客网 时间:2024/05/08 07:33

1、MVC模型把代码功能划分为3个不同类

  1. Model:保存应用程序数据的类(what your application is ,but not how it is displayed)

  2. View:包括窗口、控件以及其他一些用户可以看到并能与之交互的元素(your Controller’s minions)

  3. Controller:把模型和视图绑在一起的代码,包括处理用户输入的应用程序逻辑(how your model is presented to the user (UI logic),即用视图把模型呈现给用户)

2、
MVC的目标:最大限度地分离这3类代码,例如,实现按钮的对象不该包含按钮点击时的处理数据的代码。

3、
MVC可以帮助确保代码的最大可重用性。
一个实现通用按钮的类可以在任何程序中使用,否则,如果实现按钮的类要在点击按钮时做一些特定的计算,那这个类就只能在最初实现它的应用程序中使用。

4、 三者通信方式

  1. 控制器完全不受限地访问模型
  2. 控制器完全不受限地与视图通信(相当于跟自己的仆从对话,使唤它)
  3. 模型与视图不可直接通信
  4. The view sends action to the Controller(对应的target) when things happen in UI. (a blind way: 它并不知道控制器的全部内容,只是找到跟自己action有关的那个target)
  5. 视图发生变化(should, will, did),控制器要知道这些变化,通过delegate。例如,对于滚动条,用户已经滚动了(did),将要滚动了(will),可以滚动吗(should),通过协议通知控制器
  6. views do not own the data they display, 数据存在于模型里面。视图通过控制器从模型获取数据的方式:数据源data source (a blind structured way).例如,播放器里面有1万首歌,这一万首歌不会全部显示在视图里,如果要查找有多少首歌,要控制器去模型里面看,然后再告诉视图,视图在内部保留一万个位置,但不知道用来放什么,当滚动进度条,视图会问控制器,给我第150行处的数据以后的10个项目,控制器就会问模型拿数据。

  7. 模型不会直接与控制器通信,而是当数据发生变化时,model发出notification,控制器得到notification,就知道数据发生变化,再通过正常访问,去模拟器获取信息

这里写图片描述

5、如用户点击了应用界面上的一个按钮:
这里写图片描述

6、合并多个MVC
MVC可将另一个MVC作为其视图的一部分,即一整个MVC,可以作为另一个较大MVC的仆从,可以一直这样串联下去。例如,日历app显示一整年的时间,点击进入月视图,月视图与年视图是不一样的,月视图上有日期,或许还有一些告诉你当天有预约的圈圈,然后点击日期,就会得到日视图,日视图会显示不用时间的预约,点击预约,预约视图里面会告诉你预约事件的详情。而这些年视图、月视图、日视图、预约视图都是自身的MVC,而后三个被用作年视图的仆从,来显示更多的细节(如点击一个月,就会用一个月的MVC来显示细节)

参考来源:

http://open.163.com/movie/2014/1/M/7/M9H7S9F1H_M9H7TMJM7.html

原创粉丝点击