MVC MVP MVVM FLUX
一、MVC 模式
MVC 模式包括:
- 模型(Model):数据保存
- 视图(View):用户界面
- 控制器(Controller):业务逻辑
各部分之间的通信方式如下:
- View 传送指令给 Controller;
- Controller 完成业务逻辑后,要求 Model 改变状态;
- Model 将新的数据发送到 View,用户得到反馈。
所有通信都是单向的。
1、接受用户指令的方式
当接受用户指令时,MVC 可以分成两种方式:
1-1、通过 View 接受指令
1-2、通过 Controller 接受指令
2、MVC 优点
- 控制器与视图分离,视图与业务层分离,耦合性低;
- 多个视图能共享一个模型,重用性高;
- 可维护性高,有利软件工程化管理。
3、MVC 缺点
- View 依赖特定的 Model,无法组件化;
- 如果脱离 Controller,View 难以独立应用。
二、MVP 模式
MVP 模式属于 MVC 的变体,这个设计模式在安卓开发上较为常见。
其中,P 指的是 Presenter
,View 与 Model 不直接联系,而是通过 Presenter
进行传递,且各部分之间的通信都是双向的,View 向 Presenter
发起调用请求,Presenter
修改 Model,Model 修改完成后通知 Presenter
,Presenter
再调用 View 的相关接口刷新界面。
1、MVP 优点
- Model 与 View 完全分离,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 包括 Model、View 和 ViewModel
,其中 Model 是模型,View 是视图,ViewModel
是视图模型,用于连接 Model 和 View。
Model 通过数据绑定来操作 View,而 View 通过事件绑定来操作 Model。
1、MVVM 优点
- 低耦合。一个
ViewModel
可以绑定到不同的 View 上,当 View 变化时 Model 可以不变,当 Model 变化时 View 也可以不变; - 可重用性。可以把视图逻辑放在一个
ViewModel
中,让多个 View 重用该视图逻辑;
2、MVVM 与 MVC 的区别
MVVM 实现了 View 和 Model 的自动同步,即 Model 的属性改变时,不用手动操作 DOM 元素来改变 View 的显示,对应 View 层显示会自动改变。
3、MVVM 与 MVP 的区别
MVVM 采用双向绑定:View 的变动自动反映在 ViewModel
,这样就不用处理接收事件和 View 更新的工作了。
四、Flux 模式
MVVM 的双向数据流极大简化了开发者的工作,但问题也随之而来。由于绑定的随意性,某个 View 对 Model 进行的修改可能会对其他 View 造成连锁反应,再加上各种异步回调,提高了代码的调试成本,因此很多人主张回归到单向数据流模式,其中的典型代表就是 facebook 的 Flux 框架。
Flux 模式采用单向数据流的方式管理数据的流动,以解决 MVVM 的数据流混乱问题。其中:
View
:视图层Action
:视图层发出的消息(例如 click 事件)Dispatcher
:用来接收 Action、执行回调函数Store
:用来存放应用的状态,一旦发生变动,就会通知 View 更新页面
如图所示,Flux 引入了单向数据流,理清了混乱的业务逻辑,越来越被开发者所接受。Flux 存在多种实现,Redux 就是其中一种。