【Android 编程架构】MVC/MVP/MVVM

MVC到MVVM的演进:探索架构模式背后的设计哲学与实战选择 本文深入探讨了从MVC到MVVM的架构模式演进,分析了MVC、MVP和MVVM的设计哲学与实战应用。通过对比各模式的核心组件、交互方式和适用场景,帮助开发者理解软件系统架构设计的演变历程,为项目选型提供决策依据。MVVM凭借数据绑定和响应式编程优势,已成为现代前端开发的主流选择。 阅读详情
Android发展到今天比较主流的架构是MVP,但是MVP其实也是对MVC的一种演变,所以在着重介绍MVP之前先总结一下MVC模式。

##MVC定义
在Android开发过程中流行的开发框架曾经采用的是MVC模式,用MVC模式的好处就是便于UI界面的显示和业务逻辑的分离。
MVC的全名是Model View Controller,中文意思就是“模型 视图 控制器”,它是一种软件的设计典范,它是用一种“业务逻辑、数据、界面显示”分离的手段组织代码。在Android当中,
M:处理业务逻辑
V:处理数据显示部分(XML布局)
C:Activity处理用户交互的问题(Activity控制器控制读取Model层的数据,然后把数据交给界面进行显示)

##Android MVC缺点

  1. 在Android当中相比传统的MVC设计模式,它的View层对应的是我们Android当中的XML布局文件,但是这个XML布局文件并不像我们的Java Web端那么强大,能做的事情其实非常地有限。
  2. 而Controller层对应的Activity这个类不仅要处理业务逻辑,同时要处理Android当中操作UI的功能,这就导致Controller层非常的冗余和厚重。

为了改善Android MVC的问题,我们引入了MVP模式,它会比MVC模式的耦合性更低。
##MVP定义
当我们把架构从MVC演变成MVP后,它出现的Presenter层到底是什么意思?在MVP里我们会将Activity层视为View层,而Presenter层负责View层和Model层的数据交互。具体来说是这样,

  1. M:数据模型层
  2. V:对应Activity,负责View的绘制和用户交互
  3. P:负责View层和Model层的交互
    这里写图片描述
    我们来看上图,不管是上面MVP的P层,还是下面的MVC的C层,它都起到了逻辑控制处理的角色。而大家仔细看图,两者最大的一点不同是,MVP中的Model层是不会和View层直接进行交互的。
    我们知道,在Android中对UI的操作只能在主线程中,所以我们把View层和Model层分离开是非常有必要的。
    ##MVP实战
    为了便于理解,单独开了一篇blog讲解MVP,点击此处查看。

接下来我给大家简单讲解一下MVVM设计模式,理论上来说,它会比MVP模式更先进,但是在实战中用的还是比较少。这里简单讲一下。
##MVVM定义
这里写图片描述
其中,
View层对应的是Activity和XML布局,
Model层对应的是数据模型,
ViewModel层对应的是View层和Model层的交互。
MVVM和MVP的目标其实是很类似的,它主要通过数据绑定和依赖来打造一个更高效的架构。接下来来看一下如何构建一个MVVM框架。
##最后
以上就是我对MVC/MVP/MVVM的总结,如有任何疑问可直接留言提问,博客每天都会查看。

Android技术架构的发展与未来展望 在过去的几年里,Android技术架构经历了不断的演进和改进,以满足日益增长的用户需求和不断变化的市场环境。总结起来,Android技术架构经历了从传统的MVC/MVP到现代化的MVVM等架构的演进,未来将继续朝着更加模块化、可测试和高效的方向发展。MVVM是目前较为流行的Android架构之一。为了解决传统Android架构的问题,出现了一系列的现代化架构,如MVI(Model-View-Intent)、MVVM(Model-View-ViewModel)和Clean Architecture等。 阅读详情

相关推荐

Android 架构MVC MVP MVVM+实例

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

帅次的博客 5174

Android架构之MVC,MVP,MVVM解析

Presenter中同时持有View层的interface的引用以及Model层的引用,而View层持有Presenter层引用。当View层某个界面需要展示某些数据的时候,首先会调用Presenter层的引用,通知Presenter层加载数据,然后Presenter层会调用Model层请求数据,当Model层数据加载成功之后会调用Presenter层的回调方法通知Presenter层数据加载情况,最后Presenter层在调用View层的接口将加载后的数据展示给用户。比如说首页,详情页面,播放器页面。

ChenYiRan123456的博客 1241

ComfyUI-Impact-Subpack插件安装避坑指南:为什么你的UltralyticsDetectorProvider节点还是找不到?

本文深入解析了ComfyUI-Impact-Subpack插件的安装与排障问题,特别是针对UltralyticsDetectorProvider节点缺失的常见问题提供了详细的解决方案。从底层机制到高阶应用,涵盖了手动安装、模型配置、性能优化等关键步骤,帮助用户彻底解决插件依赖关系断裂问题。

Jerry的专栏 1152

一篇文章讲清楚Android中的MVC、MVP、MVVM架构 (附实现代码)

MVC、MVP、MVVM大体上都是把系统划分成3个模块:视图层、业务层、数据层。但是他们的通信方式、数据流动方向不一致,形成了不同的架构。其后面产生的架构都是为了更好的解耦,解决已有架构的不足。每个架构都有自己的优缺点,没有最好的架构,只有最合适的架构。

bugyinyin的博客 6787

fluent二维叶型仿真_Fluent案例4【自然对流】

自然对流来了!!江苏的高校好多开学了,我啥时候才能开学另外,刚才看了何同学的Mac Pro深度体验视频,我好酸/(ㄒoㄒ)/~~好想拥有一台跑仿真那种sou~sou~sou~的机器。废话不多说了,进入正题!案例题目:一个矩形空腔内有500K恒温小球,矩形空腔充斥空气,边界条件绝热,模型尺寸如下,试模拟空腔内空气流动状态做出温度变化图。(尺寸大小懒得写了,在建模部分里有)操作平台:workbench...

weixin_39724469的博客 3670

基于Windows环境的OGG远程抽取异常(经典模式)OGG-02830 Formatting error

MOS提供的解决方法,根据MOS的提示是由于使用的OGG版本太新了,经典模式下已经弃用了这种远程抽取方式。问题:Windows环境下启用远程抽取ADG备库的数据,在启动抽取进程的时候出现如下错误提示。

Mrzhou的博客 380

android mvc开发模式,Android 开发模式(MVC、MVP、MVVM)

MVC、MVP和MVVM都是为了解决界面呈现和逻辑代码分离而出现的开发模式。MVP和MVVM都是在MVC的基础上演化而来。一、MVC模式MVC是Model-View-Controller的简称。Model:模型层,负责处理数据的加载或者存储。View:视图层,负责界面数据的展示,与用户进行交互。Controller:控制器层,负责逻辑业务的处理。MVC关系模型图在MVC里,View是可以直接访问M...

weixin_31143391的博客 616

使用 ONLYOFFICE API 构建 Java 转换器,在 Word 和 PDF 之间进行转换

随着文档处理需求的增加,格式转换成为了一个重要的需求点。由于PDF格式具有跨平台、不易被篡改的特性,将Word格式(.docx)转换为PDF格式(.pdf)的需求尤为强烈。ONLYOFFICE作为一个强大的办公套件,提供了这样的转换功能,使得用户可以轻松地在Word和PDF之间进行转换。

ONLYOFFICE的官方博客 4571

Android三大架构(MVC、MVP、MVVM)笔记

MVC的全称是Model-View-Controller,即模型-视图-控制器,它是MVC、MVP、MVVM这三者中最早产生的框架,其他两个框架是以它为基础发展而来的。MVC的目的就是将M和V的代码分离,且MVC是单向通信,必须通过Controller来承上启下。M(Model):主要处理数据的存储、获取、解析V(View):即Fragement、Activity、View等XML文件。

Chenyile161616的博客 6044

Experion PKS系列开发:I_O模块_ExperionPKS与第三方I-O模块的集成

通过上述步骤,可以成功将第三方I/O模块集成到Honeywell Experion PKS系统中,实现对现场设备的监视和控制。集成过程中需要注意选择合适的第三方模块,配置正确的通信参数,编写正确的控制逻辑,并进行充分的测试,以确保系统的稳定性和可靠性。不同的通信协议(如Modbus、Profibus、Ethernet/IP、CANopen、OPC UA)有其独特的配置和编程方法,但总体流程相似。在实际应用中,根据项目需求选择合适的协议和模块,可以有效提高系统的灵活性和适应性。

zhubeibei168的博客 1102

基于FPGA的64点fft变换verilog开发

这精度的损失在10bits看来对最后的误差的影响是存在是不可忽略的。此后,在这思想基础上又开发了高基和分裂基等快速算法,随着数字技术的高速发展,1976年出现建立在数论和多项式理论基础上的维诺格勒傅里叶变换算法(WFTA)和素因子傅里叶变换算法。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

FPGA/MATLAB学习教程/源码/项目合作开发 1977

小米2019秋招安卓开发笔试题全解析:从基础到实战

Android开发不仅要求掌握四大组件、Handler消息机制等核心原理,还需要理解并发编程、自定义View与性能优化等工程实践。这些基础能力直接决定了应用的质量与稳定性,也是大厂校招笔试中筛选人才的关键依据。从HashMap底层实现到Synchronized并发控制,从Activity生命周期到屏幕适配方案,扎实的基本功往往比项目经验更能体现候选人的技术深度。在实际开发中,无论是处理复杂的UI层级,还是解决地图遮挡等适配问题,都离不开对这些底层机制的理解。以小米2019秋招安卓开发笔试题为蓝本,系统复盘了

weixin_34356555的博客 372

华为OD机考双机位C卷 - 相对开音节 (Java & Python & JS & GO & C++ & C)

华为OD机考双机位C卷 - 相对开音节 , 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 744

《安卓高级开发》知识点整理(架构篇)

第一章 架构师入门 第一节 UML建模 1.1.0 PowerDesigner安装 1.1.1 正向工程与逆向工程在UML图中的应用 1.1.2 关系(依赖,泛化,关联,实现)画法 1.1.3 AOP面向切面架构设计 1.1.4 集中式登录架构设计 第二节 设计模式 1.2.1 MVC架构设计与三层模型 1.2.2 MVP思想精髓与解耦 1.2.3 MVP思想实现项目基础框架搭建 1.2.4 更节省的设计模式之MVVM实现数据双向绑定 1.2.5 MVVM与DataBinding 第三节 无死角分析Andr

让技术为我所用 1042

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

2024年Android最新985硕艰难转行Android之路 加面经分享(1),面试完腾讯我才发现这些知识点竟然没掌握全面了

笔者之前工作是在金融公司可能并不是特别追求技术,而笔者又是喜欢追求技术的人,所以格格不入,只能把目标放在互联网大厂了。也希望大家都去敢于尝试和追逐自己的梦想!BATJ大厂Android高频面试题网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!

2401_84558467的博客 808

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android架构演进与主流模式解析

移动应用架构设计是软件开发的核心环节,其演进过程反映了工程实践的需求变化。从经典的MVC模式到现代MVVM架构,技术方案始终围绕解耦、可测试性和维护性三大原则展开。Android平台特有的组件生命周期管理催生了ViewModel、LiveData等Jetpack组件,结合Kotlin协程实现了更优雅的异步处理。在模块化开发成为主流的今天,Clean Architecture与MVI等模式能更好地支持大型项目开发。通过合理分层和依赖注入,开发者可以构建出兼具灵活性和稳定性的移动应用架构,满足从快速迭代到长期维

weixin_33805743的博客 414

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android高级开发技术:插件化与架构设计

Android高级开发技术:插件化与架构设计 本文深入探讨了Android高级开发中的关键技术,包括插件化原理、ClassLoader机制、AOP编程思想、主流架构模式(MVC/MVP/MVVM)对比以及组件化开发方案。文章详细解析了Android ClassLoader的体系结构和工作原理,阐述了AOP在Android中的实际应用场景,分析了不同架构模式的优缺点和适用场景,并提供了组件化开发的具...

gitblog_00555的博客 453

6年老Android的阿里一日游,面试官不断挖坑如何从容应对(1),安卓应用开发项目

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

2401_84152845的博客 460

安卓架构设计八股文

安卓架构设计八股文

前端金牌摸鱼达人 517

Android开发面试简历,成功入职阿里

3.熟练掌握Android动态加载技术,包括掌握动态加载技术框架网易云换肤以及手写插件化框架。 4.掌握OkHttp,Retrofit,Glide,ButterKnife,IOC,ARouter,AndFix,EventBus,LiveDataBus等一线互联网框架和线下行业最流行的框架的核心原理以及能够手写打造简易版。 5.能够熟练使用MVC,MVP,MVVM等架构模式进行项目开发 6.熟练掌握第三方框架的使用,比如微信相关API,支付宝相关API,推送相关API,shareSDK,银联API等。 7.熟

m0_61331407的博客 331

android_知识整理

转载自: android_cr的博客 http://blog.csdn.net/weixin_36244867/article/details/54616338 OOP 01. 反射 基础 Context都没弄明白,还怎么做 Android 开发?  四大组件之Activity(一)  四大组件之Activity(二)  Fragment完全解析系列(一)

xcjean的博客 208

Android面试题持续更新:面试大厂请收好这份钉钉和抖音的面经!

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。

2401_84545468的博客 504

为什么Android开发者应该听TheContext-Podcast:6个不容错过的理由

TheContext-Podcast 是由三位资深Android开发者主持的开源Android开发播客节目,聚焦Android架构、Kotlin、响应式编程等核心话题,并附完整的文字Show Notes。无论你是刚入行的新手还是想跟上技术趋势的工程师,这档播客都能帮你系统性地补齐Android开发的"上下文"。 [![TheContext-Podcast Android开发播客节目Logo](h

gitblog_00718的博客 331

目前编写安卓app的话有哪几种设计模式?

目前在 Android 应用开发中,主流的架构设计模式主要有以下几种。随着 Google 官方对 Jetpack 组件和 Kotlin 协程/Flow 的强力推崇,整个行业的开发范式已经非常统一。按照和。

hnlgzb的专栏 461

Android开发面试:架构设计和网络知识答案精解

架构设计 编程思想 六大设计原则 重构-Code Smell AOP 设计模式 创建型5个 行为型11个 结构型7个 编程范式 MVC MVP MVVM MVI 模块化 组件化 插件化、热修复 Jectpack 网络 网络基础 TCP/UDP协议 Http/Https协议 Socket通信

让学习编程变得生动有趣~ 1592
上一篇: 【Java 基础】反射
下一篇: 【Android View相关】View的绘制机制
Colin_Mindset
博客等级 码龄12年 159粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值