Skip to main content

MVC MVP MVVM FLUX

一、MVC 模式

MVC 模式包括:

  • 模型(Model):数据保存
  • 视图(View):用户界面
  • 控制器(Controller):业务逻辑

各部分之间的通信方式如下:

  1. View 传送指令给 Controller
  2. Controller 完成业务逻辑后,要求 Model 改变状态;
  3. Model 将新的数据发送到 View,用户得到反馈。

所有通信都是单向的。

1、接受用户指令的方式

当接受用户指令时,MVC 可以分成两种方式:

1-1、通过 View 接受指令

1-2、通过 Controller 接受指令

2、MVC 优点

  • 控制器与视图分离,视图与业务层分离,耦合性低;
  • 多个视图能共享一个模型,重用性高;
  • 可维护性高,有利软件工程化管理。

3、MVC 缺点

  • View 依赖特定的 Model,无法组件化;
  • 如果脱离 Controller,View 难以独立应用。

二、MVP 模式

MVP 模式属于 MVC 的变体,这个设计模式在安卓开发上较为常见。

其中,P 指的是 PresenterViewModel 不直接联系,而是通过 Presenter 进行传递,且各部分之间的通信都是双向的,ViewPresenter 发起调用请求,Presenter 修改 ModelModel 修改完成后通知 PresenterPresenter 再调用 View 的相关接口刷新界面。

1、MVP 优点

  • ModelView 完全分离,View 可以组件化;
  • 便于测试:只需要给 Presenter mock 一个 View,实现 View 的接口即可。

2、MVP 缺点

  • 视图与 Presenter 的交互过于频繁;

3、MVP 与 MVC 的区别

  • MVP 中 View 不直接使用 Model,它们之间的通信是通过 Presenter 来进行的,所有的交互都发生在 Presenter 中;而 MVC 中 View 会直接从 Model 中读取数据而非通过 Controller;
  • MVC 中 Model 不依赖于 View,但 View 依赖于 Model 的。

三、MVVM 模式

MVVM 包括 ModelViewViewModel,其中 Model 是模型,View 是视图,ViewModel 是视图模型,用于连接 ModelView

Model 通过数据绑定来操作 View,而 View 通过事件绑定来操作 Model

1、MVVM 优点

  • 低耦合。一个 ViewModel 可以绑定到不同的 View 上,当 View 变化时 Model 可以不变,当 Model 变化时 View 也可以不变;
  • 可重用性。可以把视图逻辑放在一个 ViewModel 中,让多个 View 重用该视图逻辑;

2、MVVM 与 MVC 的区别

MVVM 实现了 ViewModel 的自动同步,即 Model 的属性改变时,不用手动操作 DOM 元素来改变 View 的显示,对应 View 层显示会自动改变。

3、MVVM 与 MVP 的区别

MVVM 采用双向绑定:View 的变动自动反映在 ViewModel,这样就不用处理接收事件和 View 更新的工作了。

四、Flux 模式

MVVM 的双向数据流极大简化了开发者的工作,但问题也随之而来。由于绑定的随意性,某个 ViewModel 进行的修改可能会对其他 View 造成连锁反应,再加上各种异步回调,提高了代码的调试成本,因此很多人主张回归到单向数据流模式,其中的典型代表就是 facebook 的 Flux 框架。

Flux 模式采用单向数据流的方式管理数据的流动,以解决 MVVM 的数据流混乱问题。其中:

  • View:视图层
  • Action:视图层发出的消息(例如 click 事件)
  • Dispatcher:用来接收 Action、执行回调函数
  • Store:用来存放应用的状态,一旦发生变动,就会通知 View 更新页面

如图所示,Flux 引入了单向数据流,理清了混乱的业务逻辑,越来越被开发者所接受。Flux 存在多种实现,Redux 就是其中一种。