Android -- 每日一问:谈谈MVC、MVP和MVVM模式,你有在自己的项目中使用过吗?

经典回答

MVC 模式

image.png

全名是Model–View–Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。其中 Model 层处理数据,业务逻辑等;View 层处理界面的显示结果;Controller 层起到桥梁的作用,来控制 View 层和 Model 层通信以此来达到分离视图显示和业务逻辑层。

我们往往把 Android 中界面部分的实现也理解为采用了 MVC 框架,常常把 Activity 理解为 MVC 模式中的 Controller 。

MVP 模式

MVP 其实是 MVC 的一种演进版本,它更简单,将 MVC 中的 Controller 改为了 Presenter,View 通过接口与 Presenter 进行交互,降低耦合,方便进行单元测试。

View:负责绘制UI元素、与用户进行交互(Activity、View、Fragment都可以做为View层);
Model:对数据的操作、对网络等的操作,和业务相关的逻辑处理;
Presenter:作为View与Model交互的中间纽带,处理与用户交互的逻辑。可以把Presenter理解为一个中间层的角色,它接受Model层的数据,并且处理之后传递给View层,还需要处理View层的用户交互等操作。

我们看看如下的MVC和MVP的对比图更能直观的理解这两种模式的区别:
image.png

最明显的区别就是,MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。

如何在自己的项目中使用 MVP ?
官方给我们写了一些MVP的样例工程,用不同的概念和工具实现同一个Todo项目。

Github地址

MVP 的好处与问题
当你了解清楚 MVP 模式后,它的好处也就很明显了:

  1. UI层和逻辑层分离,UI层不在涉及业务逻辑代码,某层的改动不需要到处去修改代码;
  2. 测试很方便,你可以直接调用Presenter层写测试用式(可以使用Junit框架);
  3. 最后是可维护性和可扩展性,MVP的各个类职责都非常明确且单一,后期的扩展,维护都会更加容易。

当然,坏处也很明显,首先代码类增加了,一个小功能你可能要为它专门写 Presenter 和 Model 层的实现,以前这些你一口气就加在 View 层了。同时需要对新进项目的人员进行一些 MVP 模式的培训,以便他们不会写出破坏已有模式的代码。

MVVM 模式

MVVM 模式(Model–View–ViewModel模式),和 MVP 模式相比,MVVM 模式用 ViewModel 替换了 Presenter ,其他层基本上与 MVP 模式一致,ViewModel 可以理解成是View的数据模型和Presenter的合体。

MVVM 采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然,这种模式实际上是框架替应用开发者做了一些工作(相当于ViewModel类是由库帮我们生成的),开发者只需要较少的代码就能实现比较复杂的交互。这一步对于我还是比较有吸引力了,可以少写很多模板代码。

image.png

官方在 Google I/O 2015 大会上推出来MVVM模式的支持函数库 Data Binding Library。在 Android Studio 2.1 Preview 3 之后,开始支持双向数据绑定,即在 View 层修改输入也会触发 Model 层的改变。
当然,做过 WinPhone 开发的人一定想起来了微软在很多年前就在使用MVVM模式了。

你的朋友是不是也在准备面试呢?你可以把今天的题目分享给好友,或许你可以帮到他。

猜你喜欢

转载自blog.csdn.net/duoduo_11011/article/details/128252560