MVC、MVP、MVVM模式的概念与区别

------《MVC、MVP、MVVM模式的概念与区别》

前言:

        首先MVC,MVP,MVVM都是为了解决UI页面与逻辑代码分离而出现的模式,MVP和MVVM都是MVC的基础上演化而来。他不属于某种语言的框架,只要是有UI页面与逻辑代码我们都可以使用这几种框架去搭建我们的项目。他是一种框架模式。
        M和V分别指Model层和View层,但其功能会因为框架的不同而变化。Model层是数据模型,用来存储数据;View层是视图,展示Model层的数据。
        虽然在不同的MV(XX)框架中,Model层和View层的内容可能会有所差别,但是其基础功能不变,变的只是 数据的传输方式 。

预热:

        MVC —— Model-View-Controller: 作为 Controller 层的 Actvity/Fragment 等充当了 View 的角色,代码过于臃肿;同时在 View 层又容易直接操作 Model,导致 View 和 Model 层耦合,无法独立复用。有时候看到一个 Activity 能有几千甚至上万行的代码,简直噩梦。
        MVP —— Model-View-Presenter: Presenter 和 View 层之间通过定义接口实现通信,解耦了 View 和 Model 层。然而当业务场景比较复杂时,接口定义会越来越多,且可能定义模糊,接口一旦变化,对应实现也需要发生变化。
        MVVM —— Model-View-ViewModel: MVVM 解决了 MVP 的问题,使得 ViewModel 和 View 之间不再依赖接口通信,而是通过 LiveData, RxJava, Flow 等响应式开发的方式来通信。
        MVI —— (后面单讲)

挨个讲讲:

MVC

        MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写
        Model:模型层,数据模型及其业务逻辑,是针对业务模型建立的数据结构,Model与View无关,而与业务有关。
        View:视图层,用于与用户实现交互的页面,通常实现数据的输入和输出功能。
        Controller:控制器,用于连接Model层和View层,完成Model层和View层的交互。还可以处理页面业务逻辑,它接收并处理来自用户的请求,并将Model返回给用户。

优点:
耦合性高,生命周期成本低,部署快,可维护性高,适用于快速开发的小型项目
缺点:
不适合大型,中等项目,View层Controller层连接过于紧密
View层对Model层的访问效率低
一般的高级UI页面工具和构造器不支持MVC模式

MVP

        MVP全名是Model View Presenter,是模型(model)-视图(view)-表示器(Presenter)的缩写
        Model:模型层,用于数据存储以及业务逻辑。
        View:视图层,用于展示与用户实现交互的页面,通常实现数据的输入和输出功能。
        Presenter:表示器,用于连接M层、V层,完成Model层与View层的交互,还可以进行业务逻辑的处理。

执行流程:
1、View层收到用户的操作
2、View层把用户的操作交给Presenter
3、Presenter直接操作Model层进行业务逻辑处理
4、Model层处理完毕后,通知Presenter
5、Presenter收到通知后,去更新View层
        在MVP模式中,Model与View无法直接进行交互,所以Presenter层会从Model层获得数据,适当处理后交给View层进行显示
在MVP模式中,Presenter层将View层和Model层进行隔离,使View和Model之间不存在耦合,同时将业务逻辑从View层剥离
优点:
        可以更高效的使用Model,所有的交互都发生在——Presenter内部
        将一个Presenter用于多个视图,而不需要改变Presenter的逻辑,View变化比Model变化频繁,逻辑结构清晰,View层代码不再臃肿
缺点:
1、MVP模式基于接口设计,会增加很多类,代码逻辑虽然清晰,但代码量庞大
2、MVP适用于中小型项目,大型项目慎用
3、MVC和MVP的主要区别:
4、MVP中View与Model并不直接交互,而是通过与Presenter交互来与Model间接交互
5、MVP中Controller是基于行为的,并且可以被多个View共享,Controller可以负责决定显示哪个View
6、MVP中Presenter与View的交互是通过接口来进行的,更有利于添加单元测试。
7、MVC中View可以与Model直接交互,通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑

MVVM

MVVM 即 Model-View-ViewModel
        M——Model(模型)实体模型,定义实体类,获取业务数据模型,如通过数据库或者网络来操作数据等
        V——View(视图)布局文件(XML),主要进行控件的初始化设置
        VM——ViewModel(控制器):连接 View 与 Model 的中间桥梁,ViewModel 与 Model 直接交互,通过DataBinding将数据变化反应给View

        存在两个方向都实现的情况,叫做数据的双向绑定。双向数据绑定可以说是一个模板引擎,它会根据数据的变化实时渲染。如图3.3所示,View层和Model层之间的修改都会同步到对方。
        双向绑定ViewModel+LiveData+DataBinding的形式上一篇已经讲了哦

优点:

  1. 结构清晰,职责划分清晰
  2. 模块间充分解耦
  3. 在 MVP 的基础上,MVVM 把 View 和 ViewModel 也进行了解耦
    缺点:
    1、定位问题困难

结尾:

        从MVC到MVP再到MVVM,这是一个不断进步的过程,后两者都是在MVC基础上发展而来,使用起来更加方便。这三者主要的区别在于除Model层和View层之外的第三层的不同。

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值