Android 框架 MVC、MVP、MVVM
2020-03-17 本文已影响0人
Merbng
MVC
MVC
用一种业务逻辑、数据、界面显示分离的方法组织代码,在改进和个性化定制界面及用户交互的同时,
不需要重新编写业务逻辑。其中Model层处理数据、业务逻辑等;View
层处理界面显示的结果;Controller
层起到桥梁的作用,
来控制View
层和Model
层通信以此来达到分离视图显示和业务逻辑层。
我们往往把Android中界面部分也理解采用了MVC框架,常常把Activity理解成MVC中的Controller
- 特点
- 耦合性低
- 可扩展性好
- 模块职责划分明确
什么时候适合用MVC模式呢? 当一个项目很小的时候
MVP
而MVP其实是MVC的一种演进版本,它更简单,将MVC中的Controller改为了Presenter,View通过
接口与Presenter进行交互,降低耦合,方便进行单元测试
- View:负责绘制UI元素,与用户进行交互(Activity、View、Fragment都可以作为View层)
- Model:对数据的操作、对网络等的操作,与业务相关的逻辑处理;
- Presenter:作为View与Model交互的中间纽带,处理用户交互的逻辑。可以把Presenter理解为一个中间层的角色,
它接受Model层的数据,并且处理之后传递给View层,还需要处理View层的用户交互等操作。
MVP的优点与问题
- 优点
- UI层与逻辑层分离,UI层不再涉及业务逻辑代码,某层的改动不需要到处修改代码。
- 测试很方便,你可以直接调用presenter层写测试用例
- 可维护性和扩展性,MVP各个类的职责都非常明确且单一,后期的扩展和维护更加容易
- 缺点
当然,坏处也很明显,首先代码类增加了,一个小功能你可能要为它专门写presenter和model层的实现,
以前这些都是加在View层的。
MVVM
和MVP模式相比,MVVM模式用ViewModel替换了presenter,其他层基本与MVP模式一样,
ViewModel可以理解成是View的数据模型和Presenter的合体,MVVM采用双向绑定(data-binding):
View的变动,自动反映在ViewModel上,反之亦然,这种模式实际上是框架替我们应用开发者
做了一些工作(相当于ViewModel类是库帮我们生成的),开发者只需要较少的代码就能实现比较复杂的交互,
这一步还是比较吸引人的,可以少些很多模版代码。
- 缺点:
- 数据绑定使得bug很难被调试,你看到界面异常了,有可能是你的View代码有bug,也有可能是Model的代码的问题,数据绑定使得一个位置的bug被快速传递到新的别的位置,要定位原始问题的地方变得不那么容易了
- 对于过大的项目,数据绑定需要花费更多的内存。