MVX是一下三种模式的统称
- MVC
- MVP
- MVVM
MVC
MVC 模型中实线表示方法调用关系,虚线表示事件的传递方向
一个输入事件的工作流程:View 将事件通知到 Controller ,Controller更新Model数据,Controller通知View更新页面,View调用Model方法获取新数据
MVP
工作方式
- 当视图接收到来自用户的事件时,会将事件转交给 Presenter 进行处理;
- 视图向外界暴露接口,当需要更新视图时 Presenter 通过视图暴露的接口更新视图的内容;
- Presenter 负责对模型进行操作和更新,在需要时取出其中存储的信息;
- 当模型层改变时,可以将改变的信息发送给观察者 Presenter;
MVC 与 MVP 之间的区别其实并不明显,两者之间最大的区别就是 MVP 中使用 Presenter 对视图和模型进行了解耦,它们彼此都对对方一无所知,沟通都通过 Presenter 进行。
MVVM
MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这种实现是基于数据绑定基础架构
MVVM最重要的不是如何同步视图和视图模型之间的状态是使用观察者模式、双向绑定还是其它的机制都不是整个模式中最重要的部分,最为关键的是视图模型创建了一个视图的抽象,将视图中的状态和行为抽离出一个新的抽象,这才是 MVVM 中需要注意的。
MVVM 的缺点
第一点:数据绑定使得 Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。 第二点:一个大的模块中,model也会很大,虽然使用方便了也很容易保证了数据的一致性,当长期持有,不释放内存,就造成了花费更多的内存。 第三点:数据双向绑定不利于代码重用。客户端开发最常用的重用是View,但是数据双向绑定技术,让你在一个View都绑定了一个model,不同模块的model都不同。那就不能简单重用View了。