代码MVC ,MVP ,MVVM模式

本文详细解析Android开发中MVVM、MVC、MVP三种架构模式,重点介绍MVVM模式下View、ViewModel、Model三层职责划分,以及DataBinding框架在实现数据驱动UI更新和事件响应中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

说到Android MVVM,就会联想到DataBinding框架。然而两者的概念是不一样的,不能混为一谈。MVVM是一种架构模式,而DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个工具。

网上关于MVVM框架的搭建和使用的文章很少,大多提到MVVM框架,就是在介绍DataBinding的使用。对于MVVM中各模块之间如何划分,如何定义,又是如何配合实现高度解耦的文章更是少之又少。大家看完后还是一头雾水,只是对MVVM有个大概的了解,并不很清楚如何上手。

接下来,我们先认识什么是MVVM,然后再一步一步来设计整个MVVM框架。

MVC、MVP简介

MVC、MVP和MVVM都是在安卓开发中经常使用的模式,我们在认识MVVM之前先回顾一下MVC和MVP。

MVC

  • View:xml布局
  • Model:数据层,负责数据交互、存储和实体类定义
  • Controller:业务处理层

Android开发本身还是比较符合MVC架构的,但是Android中纯粹作为View的XML视图功能太弱,我们大量处理View的逻辑只能写在Activity中,这样Activity就充当了View和Controller两个角色,直接导致Activity中的代码臃肿、混乱,导致阅读困难、重用困难和维护困难。相信大多数Android开发者都遇到过一个Acitivty数以千行的代码情况吧!所以,更贴切的说法是,这个MVC结构最终其实只是一个Model-View(Activity:View&Controller)的结构。

MVP

  • View:xml文件及对应的Activity或Fragment,负责界面展示和交互
  • Model:数据层,负责数据交互、存储和实体类定义
  • Presenter:负责View层和Model层之间的逻辑处理

前面我们说,Activity充当了View和Controller两个角色,MVP就能很好地解决这个问题,其核心理念是通过一个抽象的View接口(不是真正的View层)将Presenter与真正的View层进行解耦。Persenter持有该View接口,对该接口进行操作,而不是直接操作View层。这样就可以把视图操作和业务逻辑解耦,从而让Activity成为真正的View层。

不足的是,MVP模式中定义了大量的接口,使得代码结构变大和复杂;MVP是UI和事件驱动,需要手动调用大量的方法来进行实现,缺乏自动性。

所以我们迎来了MVVM框架,当然得首先感谢google爸爸提供得DataBinding,真的是很强大!

MVVM简介

 

这里写图片描述

 

在MVVM模式中,将程序结构分为三层——View-ViewModel-Model,接下来我们一起来认识它们:

View:

View层负责和UI相关的工作,我们只在XML、Activity和Fragment写View层的代码,View层不进行业务处理,也就是我们在Activity不写业务逻辑和业务数据相关的代码。

更新UI通过数据绑定实现,尽量在ViewModel里面做,Activity要做的事就是初始化一些控件(如RecyclerView设置LayoutManager或者控件的显隐),View层可以通过数据来驱动更改UI,UI事件通过Command来绑定。

简而言之:View层不做任何业务逻辑、不涉及操作数据,UI和数据严格的分开。 **UI更新和事件相应全部使用数据绑定,也就是DataBinding来实现。**这就是MVVM和MVP、MVC很明显的不同之处。

ViewModel

ViewModel层做的事情刚好和View层相反,ViewModel只负责业务逻辑,不做任何和UI相关的事情。

同时DataBinding框架已经支持双向绑定,让我们可以通过双向绑定获取View层反馈给ViewModel层的数据,并对这些数据上进行操作。

事件的处理,我们也希望能把这些事件处理绑定到控件上,并把这些事件的处理统一化,为此我们通过使用BindingAdapter对一些常用的事件做封装,把一个个事件封装成一个个Command,对于每个事件我们用一个ReplyCommand去处理就行了,ReplyCommand会把你可能需要的数据带给你,这使得我们在ViewModel层处理事件的时候只需要关心处理数据就行了,具体见MVVM Light Toolkit 使用指南的Command部分。

Model

Model层不仅包括实体类的定义,还需要对数据进行处理和读写。例如:使用Retrofit或okHttp进行网络请求,或着如数据库操作等等。

优点:

  • 数据驱动
  • 低耦合
  • 主线程更新UI
  • 可复用性
  • 方便单元测试
MVCMVPMVVM是常用的软件设计模式,用于分离应用程序的不同组件,提高代码的可维护性可重用性。以下是它们的概念区别: 1. MVC模式(模型-视图-控制器):MVC模式是最古老也是最常用的设计模式之一。它将应用程序分为三个组件:模型、视图控制器。模型负责处理数据业务规则,视图负责展示数据给用户,控制器负责处理用户输入并更新模型视图。MVC模式通过分离关注点,使得修改一个组件对其他组件没有依赖,增强了代码的可维护性。 2. MVP模式(模型-视图-展示器):MVP模式是基于MVC模式的演化,主要用于桌面移动应用程序的开发。它与MVC的不同之处在于,视图控制器被合并成一个展示器,展示器负责处理用户输入、更新模型并更新视图。MVP模式通过与视图分离,使得视图的变化不会影响展示器的逻辑。这样,在测试时可以更轻松地独立对展示器进行单元测试。 3. MVVM模式(模型-视图-视图模型):MVVM模式是一种用于构建用户界面的设计模式。它将视图的状态行为抽象成一个视图模型,视图模型负责处理用户输入、保存视图状态、与模型进行交互,并通过数据绑定将数据自动更新到视图上。MVVM模式通过数据绑定机制,使得视图模型之间的通信变得更简单,提高了可维护性可重用性。它常用于Web前端开发桌面应用程序的现代界面开发。 总结来说,MVCMVPMVVM是三种常见的软件设计模式MVC模式是最早的一种,将应用程序分为模型、视图控制器,用于分离关注点。MVP模式是基于MVC模式的演化,通过将视图控制器合并成一个展示器,便于测试维护。MVVM模式是用于构建用户界面的设计模式,通过视图模型数据绑定机制,实现了视图与模型之间的解耦。每种模式都有自己的特点适用场景,根据具体需求选择合适的模式可以提高开发效率代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值