【Android-基本框架】MVC、MVP、MVVM框架的异同

在学习Android的过程中对MVC、MVP、MVVM三个框架比较模糊,本文为了方便区分这三个框架,总结归纳了三者的异同。

框架 含义 特点 优点 缺点
MVC model-view-controller 强制性使输入、逻辑处理和输出分离 代码耦合性低、复用率高,部署快,可维护性高 增加结构的复杂性,不适合中小型项目
MVP model - view - presenter presenter作为view和model的中间方 耦合性更低 presenter需要经常变更
MVVM model-view-viewmodel viewmodel作为model和view的中间方 低耦合,高复用,可对UI进行独立测试 bug难以进行调试

——————————————————————————————————————————————————————————

MVC框架

MVC:模型(model)-视图(view)-控制器(controller)的缩写

【Android-基本框架】MVC、MVP、MVVM框架的异同_第1张图片

  1. Model(模型):应用程序的逻辑处理部分(如数据库增删改查操作)【Android开发中相当某个类实现了接口中的方法,并在这些方法中进行了逻辑处理】
  2. View(视图):应用程序的数据显示部分(如在界面上显示数据库记录)【Android开发中相当于layout的作用】
  3. Controller(控制器):应用程序与用户交互的部分(如用户增删改查数据库记录的操作)【Android开发中相当于activity中的逻辑处理】

该模型下model和view进行了分离,即业务逻辑处理和界面显示相分离,而controller是为了实现model和view的同步更新(相当于,数据库的增删改查操作和数据表显示两者分离,而用户进行数据库操作是两者沟通的桥梁)

MVC框架的优点:

  1. 耦合性低:视图和逻辑处理部分分离,在开发过程中可以各管各的,一个进行修改并不会影响另一个的功能(如:两个陌生人拥有一个共同好友,但他们两个是毫无关系的,一方的所作所为并不会影响另一方)
  2. 代码重用性高:某些应用可能出了展现给用户的视图不同,具体的业务逻辑和用户交互都是类似的,此时只需要更改视图即可,controller和model可以直接复用(如:不同的购物软件内部逻辑都是类似的,只需要更改UI界面即view部分即可)
  3. 生命周期成本低:该模式下,重点在于逻辑处理与界面开发,而接口技术的要求降低了
  4. 部署快:该模式下可以并行开发,开发效率变快
  5. 可维护性高:视图和业务逻辑分离更有利于各自的维护和更新

MVC框架的缺点:

  1. 测试困难:每个模块在使用前都需要进行调试
  2. 不适合小型、中等规模的应用程序
  3. 增加系统结构和显示的复杂性
  4. 视图与控制器间联系过于紧密,而对模型数据的访问效率低

MVP框架

Model-View-Presenter
【Android-基本框架】MVC、MVP、MVVM框架的异同_第2张图片

  1. model:进行数据逻辑的处理
  2. view:负责显示数据
  3. presenter:控制应用程序与用户的交互

但是MVP框架中view并不直接使用model,而是通过presenter进行通信的。presenter相当于是一个中介,将MVC中view对model的访问进行分离(举例:V问一个不认识的同学M借书,但是C的朋友P认识M,就通过P这个中介来向M借书)

MVP框架的优点:

  1. model和view完全分离,可以单独修改某一部分
  2. 高效的使用model,因为所有的逻辑都发生在presenter中间
  3. 可以将一个presenter应用于多个view中
  4. 内部逻辑存放在presenter中,可以直接脱离用户接口来测试

MVP框架的缺点:

  1. view与presenter的联系紧密可能会导致presenter需要变更的情况增多

MVVM框架

model-view-viewmodel
在这里插入图片描述

  1. model: 进行数据的逻辑处理
  2. view:用户所能看到的部分
  3. viewmodel:让view与model进行通讯的工具

该模式类似于MVP模式,但是该模式需要一个viewmodel,viewmodel中包含UI特定的接口和属性,直接可以在viewmodel中更新view中的相关代码

View绑定到ViewModel,向viewmodel发起请求
ViewModel跟Model通讯,让model来更新UI

MVVM的优点:

  1. 低耦合:view与model相互独立,一个viewmodel可绑定多个view
  2. 可重用性:将视图的逻辑放于viewmodel中,可以使view复用viewmodel
  3. 独立开发:view和model相互独立
  4. 可测试:可针对viewmodel进行界面的测试

你可能感兴趣的:(Android学习)