面试:MVC、MVP、MVVM区别

Android 架构 MVC MVP MVVM,这一波你应该了然于心 - 知乎

[最全]Android安卓架构MVC、MVP、MVVM之间的区别和联系(图解+案例+源码)_快乐李同学(李俊德-大连理工大学)的博客-CSDN博客_安卓mvp架构

Android中的MVC含义

  • Model:实体类(数据的获取、存储、数据状态变化)。
  • View:布局文件
  • Controller:Activity(处理数据、业务和UI)。

工作原理

  • View接受用户的交互请求。
  • View将请求转交给Controller。
  • Controller操作Model进行数据更新。
  • 数据更新之后,Model通知View数据变化。
  • View显示更新之后的数据。

MVC的缺点

1、View与Model之间还存在依赖关系,Controller很重很复杂。

由上面的MVC架构图可知,view层和model层是相互可知的,这意味着两层之间存在耦合,耦合对于一个大型程序来说是非常致命的,因为这表示开发,测试,维护都需要花大量的精力。

2、在Android中Activity即是View又是Controller,所以会很复杂。

xml作为view层,控制能力实在太弱了,你想去动态的改变一个页面的背景,或者动态的隐藏/显示一个按钮,这些都没办法在xml中做,只能把代码写在activity中,造成了activity既是controller层,又是view层的这样一个窘境。大家回想一下自己写的代码,如果是一个逻辑很复杂的页面,activity或者fragment是不是动辄上千行呢?这样不仅写起来麻烦,维护起来更是噩梦。

随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。

为了解决MVC的缺点,MVP 框架被提出来。

MVP和MVC的最大区别

在MVP中View并不直接使用Model,它们之间的通信是通过Presenter 来进行的,所有的交互都发生在Presenter内部,而在MVC中View直接从Model中读取数据而不是通过 Controller。

Android中的MVP含义

  • Model:实体类(数据的获取、存储、数据状态变化)。
  • View:布局文件+Activity。
  • Presenter:中介,负责完成View与Model间的交互和业务逻辑。

工作原理

  • View 接收用户交互请求
  • View 将请求转交给 Presenter(V调用P接口)
  • Presenter 操作Model进行数据更新(P调用M接口)
  • Model 通知Presenter数据发生变化(M调用P接口)
  • Presenter 更新View数据(P执行接口,V相应回调)

MVP的优点

  • 复杂的逻辑处理放在Presenter进行处理,减少了Activity的臃肿。
  • 解耦。Model层与View层完全分离,修改V层不会影响M层,降低了耦合性。
  • 可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。
  • Presenter层与View层的交互是通过接口来进行的,便于单元测试。

MVP的缺点

维护困难。Presenter中除了业务逻辑以外,还有大量的View->Model,Model->View的手动同步逻辑,造成Presenter比较笨重,维护起来会比较困难。P的修改需要同步修改所有的实现类。

MVVM是什么

是 Model-View-ViewModel 的简写。MVVM与MVP的结构还是很相似的,就是将Presenter升级为ViewModel。在MVVM中,View层和Model层进行了双向绑定(即Data Binding),所以Model数据的更改会表现在View上,反之亦然。ViewModel就是用来根据具体情况处理View或Model的变化。

Android中的MVVM含义

  • Model:实体类(数据的获取、存储、数据状态变化)。
  • View:布局文件+Activity。
  • ViewModel: 关联层,将Model和View进行绑定,Model或View更改时,实时刷新对方。

工作原理

  • View 接收用户交互请求
  • View 将请求转交给ViewModel
  • ViewModel 操作Model数据更新
  • Model 更新完数据,通知ViewModel数据发生变化
  • ViewModel 更新View数据
View/Model的变动,只要改其中一方,另一方都能够及时更新到

MVVM的优点

1.提高可维护性。Data Binding可以实现双向的交互,使得视图和控制层之间的耦合程度进一步降低,分离更为彻底,同时减轻了Activity的压力。

2.简化测试。因为同步逻辑是交由Binder做的,View跟着Model同时变更,所以只需要保证Model的正确性,View就正确。大大减少了对View同步更新的测试。

3.ViewModle易于单元测试。

MVVM的缺点

1.对于简单的项目,使用MVVM有点大材小用。

2.对于过大的项目,数据绑定会导致内存开销大,影响性能。

3.ViewModel和View的绑定,使页面异常追踪变得不方便。有可能是View出错,也有可能是ViewModel的业务逻辑有问题,也有可能是Model的数据出错。

猜你喜欢

转载自blog.csdn.net/cpcpcp123/article/details/128064518