Objective-C MVC MVVM MVP

来源:互联网 发布:中国海关统计数据库 编辑:程序博客网 时间:2024/04/30 15:50

MVC

iOS框架Cocoa Touch设计者们采用MVC模式那么MVC代表什么?

MVC(Model-View-Controller,模型-视图-控制器)

  • Model模型:用来呈现数据

  • View视图:用来呈现用户界面

  • Controller控制器:用来调节模型与视图之间的交互

我们来看下面的图片,来自斯坦福大学的公开课

MVC 约定, Model 不允许与View 打交道。 Model 是管理数据的, 当Model中的数据发生变化时,与之对应的视图应更新。 这就需要一种机制来支持。为此 iOS 框架提供了两种支持机制: Notification 和KVO (Key-Value Observing)。 KVO 可简单理解为,为你所关注的 Key 对象注册一个监听器。 当有数据发生变化时,就会发出广播给所有的监听器。 MVC 也约定, View 不允许直接引用Modal, 它只能被Controller 所控制。 Controller 控制 View 显示什么数据。我们知道,View 所要显示的数据是来源于 Modal, View 上产生的事件 ( 比如 Touch事件)需要通知 Controller。 既然MVC 不允许直接打交道,就需要提供一种机制。

实践(更)

以下是搭建项目的目录结构

以上两种一种是通过页面,另一种是通过MVC来分,遵守设计思路都可以。好的设计是,方便,可维护,可扩展,低耦合。哪一种设计模式只要觉得好用就可。

MVVM

采用MVC模式开发,会导致Controller层会有大量的逻辑和视图控制代码,这样controller层比较臃肿也不易维护。所以在MVC的基础上我们引入了ViewModel,我们通过下面的图片了解

MVP

MVP 即 Modal View Presenter(模型 视图 协调器),MVP 的协调器 Presenter 并没有对 ViewController 的生命周期做任何改变,因此 View 可以很容易的被模拟出来。在 Presenter 中根本没有和布局有关的代码,但是它却负责更新 View 的数据和状态。MVC 和 MVP 的区别就是,在 MVP 中 M 和 V 没有直接通信。

MVP 是第一个如何协调整合三个实际上分离的层次的架构模式,既然我们不希望 View 涉及到 Model,那么在显示的 View Controller(其实就是 View)中处理这种协调的逻辑就是不正确的,因此我们需要在其他地方来做这些事情。

PS

今天粗略的介绍一下……

0 0
原创粉丝点击