【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)的缩写
- Model(模型):应用程序的逻辑处理部分(如数据库增删改查操作)【Android开发中相当某个类实现了接口中的方法,并在这些方法中进行了逻辑处理】
- View(视图):应用程序的数据显示部分(如在界面上显示数据库记录)【Android开发中相当于layout的作用】
- Controller(控制器):应用程序与用户交互的部分(如用户增删改查数据库记录的操作)【Android开发中相当于activity中的逻辑处理】
该模型下model和view进行了分离,即业务逻辑处理和界面显示相分离,而controller是为了实现model和view的同步更新(相当于,数据库的增删改查操作和数据表显示两者分离,而用户进行数据库操作是两者沟通的桥梁)
MVC框架的优点:
- 耦合性低:视图和逻辑处理部分分离,在开发过程中可以各管各的,一个进行修改并不会影响另一个的功能(如:两个陌生人拥有一个共同好友,但他们两个是毫无关系的,一方的所作所为并不会影响另一方)
- 代码重用性高:某些应用可能出了展现给用户的视图不同,具体的业务逻辑和用户交互都是类似的,此时只需要更改视图即可,controller和model可以直接复用(如:不同的购物软件内部逻辑都是类似的,只需要更改UI界面即view部分即可)
- 生命周期成本低:该模式下,重点在于逻辑处理与界面开发,而接口技术的要求降低了
- 部署快:该模式下可以并行开发,开发效率变快
- 可维护性高:视图和业务逻辑分离更有利于各自的维护和更新
MVC框架的缺点:
- 测试困难:每个模块在使用前都需要进行调试
- 不适合小型、中等规模的应用程序
- 增加系统结构和显示的复杂性
- 视图与控制器间联系过于紧密,而对模型数据的访问效率低
MVP框架
Model-View-Presenter
- model:进行数据逻辑的处理
- view:负责显示数据
- presenter:控制应用程序与用户的交互
但是MVP框架中view并不直接使用model,而是通过presenter进行通信的。presenter相当于是一个中介,将MVC中view对model的访问进行分离(举例:V问一个不认识的同学M借书,但是C的朋友P认识M,就通过P这个中介来向M借书)
MVP框架的优点:
- model和view完全分离,可以单独修改某一部分
- 高效的使用model,因为所有的逻辑都发生在presenter中间
- 可以将一个presenter应用于多个view中
- 内部逻辑存放在presenter中,可以直接脱离用户接口来测试
MVP框架的缺点:
- view与presenter的联系紧密可能会导致presenter需要变更的情况增多
MVVM框架
model-view-viewmodel
- model: 进行数据的逻辑处理
- view:用户所能看到的部分
- viewmodel:让view与model进行通讯的工具
该模式类似于MVP模式,但是该模式需要一个viewmodel,viewmodel中包含UI特定的接口和属性,直接可以在viewmodel中更新view中的相关代码
View绑定到ViewModel,向viewmodel发起请求
ViewModel跟Model通讯,让model来更新UI
MVVM的优点:
- 低耦合:view与model相互独立,一个viewmodel可绑定多个view
- 可重用性:将视图的逻辑放于viewmodel中,可以使view复用viewmodel
- 独立开发:view和model相互独立
- 可测试:可针对viewmodel进行界面的测试