Android 架构MVC MVP MVVM+实例(上)

简介: 前言MVC是什么?Android中的MVC含义工作原理MVC的缺点MVP是什么Android中的MVP含义工作原理MVP的优点MVP的缺点MVVM是什么Android中的MVVM含义工作原理MVVM的优点MVVM的缺点MVP和MVC的最大区别如何选取框架

前言




    MVC、MVP和MVVM是软件比较常用的三种软件架构,这三种架构的目的都是分离,避免将过多的逻辑全部堆积在一个类中。


       在Android中,Activity中既有UI的相关处理逻辑,又有数据获取逻辑,从而导致Activity逻辑复杂不单一难以维护。


       为了一个应用可以更好的维护和扩展,我们需要很好的区分相关层级,要不然以后将数据获取方式从数据库变为网络获取时,我们需要去修改整个Activity。架构 使得View和数据相互独立,我们把应用分成三个不同层级,这样我们就能够单独测试相关层级,使用架构能够把大多数逻辑从Activity中移除,方便进行单元测试。


MVC是什么?


       MVC是模型(Model)-视图(View)-控制器(Controller)的缩写,用一种业务逻辑、数据、界面显示分离的方法组织代码。其实Android Studio创建一个项目的模式就是一个简化的mvc模式。


Android中的MVC含义


  • Model:实体类(数据的获取、存储、数据状态变化)。


  • View:布局文件


  • Controller:Activity(处理数据、业务和UI)。


工作原理

微信图片_20220521175857.png


  • 1.View接受用户的交互请求。


  • 2.View将请求转交给Controller。


  • 3.Controller操作Model进行数据更新。


  • 4.数据更新之后,Model通知View数据变化。


  • 5.View显示更新之后的数据。


MVC的缺点


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


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


MVP是什么


       MVP是MVC架构的一个演化版,全称是Model-View-Presenter。将MVC中的V和C结合生成MVP中的V,引入新的伙伴Presenter。


Android中的MVP含义


  • Model:实体类(数据的获取、存储、数据状态变化)。


  • View:布局文件+Activity。


  • Presenter:中介,负责完成View与Model间的交互和业务逻辑。


工作原理


微信图片_20220521180013.png

  • 1.View 接收用户交互请求


  • 2.View 将请求转交给 Presenter(V调用P接口)


  • 3.Presenter 操作Model进行数据更新(P调用M接口)


  • 4.Model 通知Presenter数据发生变化(M调用P接口)


  • 5.Presenter 更新View数据(P执行接口,V相应回调)


MVP的优点


  • 1.复杂的逻辑处理放在Presenter进行处理,减少了Activity的臃肿。


  • 2.解耦。Model层与View层完全分离,修改V层不会影响M层,降低了耦合性。


  • 3.可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。


  • 4.Presenter层与View层的交互是通过接口来进行的,便于单元测试。


MVP的缺点


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


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更改时,实时刷新对方。


工作原理

微信图片_20220521180204.png


  • 1.View 接收用户交互请求


  • 2.View 将请求转交给ViewModel


  • 3.ViewModel 操作Model数据更新


  • 4.Model 更新完数据,通知ViewModel数据发生变化


  • 5.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的数据出错。


MVP和MVC的最大区别


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


如何选取框架


       本来是要每个模式写一个适用场景,最后想想每个人都有自己的理解,别被他人束缚了。


       一句话:适合自己的才是最好的!


相关文章
|
4月前
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
140 4
|
4月前
|
存储 前端开发 Java
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
51 2
|
5月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
195 2
|
5月前
|
存储 前端开发 Java
Android MVVM架构模式下如何避免内存泄漏
Android采用MVVM架构开发项目,如何避免内存泄漏风险?怎样避免内存泄漏?
149 1
|
4月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
117 6
|
4月前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
Kotlin教程笔记(80) - MVVM架构设计
|
4月前
|
存储 Dart 前端开发
flutter鸿蒙版本mvvm架构思想原理
在Flutter中实现MVVM架构,旨在将UI与业务逻辑分离,提升代码可维护性和可读性。本文介绍了MVVM的整体架构,包括Model、View和ViewModel的职责,以及各文件的详细实现。通过`main.dart`、`CounterViewModel.dart`、`MyHomePage.dart`和`Model.dart`的具体代码,展示了如何使用Provider进行状态管理,实现数据绑定和响应式设计。MVVM架构的分离关注点、数据绑定和可维护性特点,使得开发更加高效和整洁。
214 3
|
4月前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
Kotlin教程笔记(80) - MVVM架构设计
|
5月前
|
存储 前端开发 测试技术
MVC、MVP、MVVM 模式
MVC、MVP 和 MVVM 是三种常见的软件架构模式,用于分离用户界面和业务逻辑。MVC(Model-View-Controller)通过模型、视图和控制器分离数据、界面和控制逻辑;MVP(Model-View-Presenter)将控制逻辑移到 Presenter 中,减少视图的负担;MVVM(Model-View-ViewModel)通过数据绑定机制进一步解耦视图和模型,提高代码的可维护性和测试性。
|
5月前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
67 1

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 9
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
  • 10
    android FragmentManager 删除所有Fragment 重建