MVVM模式及与MVP和MVC的区别
什么是 MVVM?
- MVVM 是 Model-View-ViewModel 的简写。
MVC 和 MVP,MVVM 之间的关系
MVC 和 MVP 的关系
- 我们都知道 MVP 是从经典的模式 MVC 演变而来,它们的基本思想有相通的地方:Controller/Presenter 负责逻辑的处理,Model 提供数 据,View 负责显示。作为一种新的模式,MVP 与 MVC 有着一个重大的区别:在 MVP 中 View 并不直接使用 Model,它们之间的通信是通过 Presenter (MVC 中的 Controller)来进行的,所有的交互都发生在 Presenter 内部,而在 MVC 中 View 会直接从 Model 中读取数据而不是通过 Controller。
MVVM 和 MVP 的关系
- 而 MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。 唯一的区别是,它采用双向绑定(data-binding):View 的变动,自动反映在 ViewModel,反之亦然。这样开发者就不用处理接收事件和 View 更新的工作,框架已经帮你做好了。
视图化解释关系
MVC 架构:
- View:对应于布局文件
- Model:业务逻辑和实体模型
- Controllor:对应于 Activity
View 可以与 Model 直接交互。
Controller 是基于行为的,并且可以被多个 View 共享。
可以负责决定显示哪个 View。
MVP 架构:
- View: 对应于 Activity,负责 View 的绘制以及与用户交互 Model: 依然是业务逻辑和实体模型 Presenter: 负责完成 View 于 Model 间的交互
View 不直接与 Model 交互,而是通过与 Presenter 交互来与 Model 间接交互。
Presenter 与 View 的交互是通过接口来进行的。
通常 View 与 Presenter 是一对一的,但复杂的 View 可能绑定多个 Presenter 来处理逻辑。
MVVM 架构:
- Model:代表你的基本业务逻辑
- View:显示内容
- ViewModel:将前面两者联系在一起的对象
一个 ViewModel 接口提供了两个东西:动作和数据。动作改变 Model 的下层(click listener,监听文字改变的 listener 等等),而数据则是 Model 的内容。
- 在 MVVM 中,ViewModel 在改变内容之后通知 binding framework 内容发生了改变。然后 framework 自动更新和那些内容绑定的 view。这两个组件只是通过 ViewModel 松耦合在一起。这种设计模式之所以好用和方便,除了明显智能化了的 View 之外,还方便了测试。因为 ViewModel 不在依赖于 View 了,你可以在没有 View 的情况下也能测试 ViewModel。在合适的依赖注入的帮助下,测试就会变得非常简单。
MVVM 的优点
1. 低耦合。视图(View)可以独立于 Model 变化和修改,一个 ViewModel 可以绑定到不同的”View”上,当 View 变化的时候 Model 可以不变,当 Model 变化的时候 View 也可以不变。
2. 可重用性。你可以把一些视图逻辑放在一个 ViewModel 里面,让很多 view 重用这段视图逻辑。
3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
4. 可测试。界面素来是比较难于测试的,而现在测试可以针对 ViewModel 来写。