一.MVC
MVC是Model-View-Controller的缩写,从字面意思可以拆分成如下结构:
-
Model 模型:
封装了业务逻辑相关的数据以及处理方法 -
View 视图:
用于渲染页面,(对应了布局以及各类控件) -
Controller 控制器:
用于连接View和Model,处理流程以及页面之间的逻辑(对应了Activity及Fragment)
MVC的特点
它将数据、视图、控制分开,实现了松耦合。
- View将事件传递到Controller中
- Controller完成想要业务后改变Model状态
- Model更新View
MVC的优点
- 实现了解耦合,修改其中一层时,不用修改另外两层代码
- 可维护性高,松耦合也就意味着维护起来更加方便
- 重用性高
MVC的缺点
- 由于控件的数据绑定都需要在Activity中完成,Activity/Fragment在View与Controller的定义中有点模糊。
- 伴随着业务的增加,Controller容易变得臃肿。
二.MVP
MVP(Model-View-Presenter)是MVC的改良模式。与MVP一样,实现了视图、模型、控制的解耦,重点是改变的通信方式。
Android的MVP实现
MVP的特点
- View接受事件,传递给Presenter
- Presenter做逻辑处理,修改Model
- Model通知Presenter数据变化,Presenter更新View
MVP的优点
- 将Model与View完全分隔,提高了可扩展性。
- 便于测试。在测试Presenter时,只要实现View的接口并注入到Presenter就可以测试Presenter的业务逻辑。
MVP的缺点
- 与MVC一样,P层起到的控制功能伴随着业务的增多,也会变得臃肿。
- Presneter需要持有View的引用,同时View也需要持有Presenter的引用,控制上存在一定复杂度。
三.MVVM
MVVM实现了数据与UI的双重绑定,其中DataBinding是实现MVVM的关键工具。
- Model
与MVC和MVP一样,Model层保存了业务数据与处理方法 - View
对应Activity以及XML,但是比起MVC与MVP框架中的View层,更加简洁 - ViewModel
负责实现View与Model的交互,将两者分离
MVVM的特点
- View接受事件,转交给ViewModel
- ViewModel操作Model更新数据
- Model更新后通知ViewModel,ViewModel更新View数据
MVVM的优点
- 低耦合。由于ViewModel的存在,View可以独立于Model变化与修改;同理,Model也可以独立于View变化与修改。
- 可重用性。一个ViewModel可被多个View重复绑定,实现同一组业务。
- ViewModel中解决了MVP中V-P互相持有引用的问题,使得结构更清晰,简洁
MVVM的缺点
- ViewModel持有Model的依赖。
- 数据绑定方式使得bug难以确定是在View中还是在Model中。
网友评论