mvc,mvp,mvvm关系和演进

Android~MVC、MVP、MVVM和MVI对比 本文梳理记录MVC、MVP、MVVM、MVI概念和演进,以及自己的理解。 面试时经常被问到,MVC MVP MVVM他们到底是什么?如何搭建一个页面? 阅读详情

一、最开始,我们刚开始学习写代码的过程中,一般都是在一个文件中写(数据,逻辑......),慢慢的,随着代码量的增多,文件可读性越来越差,开始学习将一些的代码抽离出去,将数据信息抽离的情况下,便演变出MVC这种模式。

(1)MVC:

M→Model(数据类,对数据进行一些操作)

V→View(xml布局文件,编写要显示出的内容)

C→Controller(Activity:控制层,完成view和model之间的通信)

优点:将数据Model类进行了抽离,减少了activity中的代码量,增加了一些可读性。

缺点:功能需求是不断在变化的,一些页面代码随之也会不断的增加。activity类中的代码始终还是难逃越来越多的情况,阅读起来还是困难。

二、activity处理的就是view和model之间的通讯,所以要想减轻activity的压力,就需要将view和model绑定操作抽离出去,于是演变出了MVP这种模式。

(2)MVP

M→Model(数据类,对数据进行一些操作)

V→View(Activity:绑定xml文件,所以充当了view层,创建presenter)

P→Presenter(控制层,完成view和model之间的通信,创建model,获取IView)

在这三层中还增加了一个接口层IView(由activity来实现,由presenter来调用),presenter的操作受到了限制,它想操作view层,必须通过IView接口进行操作,IView规定presenter能操作view的哪些功能。

优点:分担出activity逻辑通讯部分,耦合度降低,提高阅读性

缺点:根据业务需求的增加,IView接口方法会不断增加,Activity实现IView接口就必然也要实现它所有方法,比较麻烦

三、为了避免增加业务需求,Activity就要频繁实现接口类的方法,便引入了dataBinding(双向数据绑定),演变出了MVVM这种模式,开启dataBinding,需要在app的build.gradle中进行开启。

(3)MVVM

M→Model(数据类,对数据进行一些操作)

V→View(Activity:绑定xml文件,所以充当了view层,创建ViewModel)

VM→ViewModel(控制层,完成了数据和view绑定,编写逻辑)

优点:双向绑定时,当Model变化时,View-Model会自动更新,View也会自动变化。告别手动一个个findViewById

缺点:数据双向绑定不利于代码重用。XML中包含代码。

四、总结

 

MVC、MVP和MVVM这三种设计模式的区别 MVC、MVP 和 MVVM 这三种设计模式的区别 阅读详情

相关推荐

从MVC到微服务,技术演变的必经之路 - 北京简网CTO - 郭理靖

为什么传统的MVC模式已经不满足业务的快速变化?如何从传统的MVC框架转移到微服务架构?又应该如何制定相应的微服务架构?微服务架构又应该如何被治理?容器云是微服务治理的最好方案吗?本次演讲将和大家一起探讨这些问题。

MVC->MVP->MVVM架构完整演变过程剖析

在之前对于MVP这种架构风格已经进行了深入的学习了,接下来则打算学习一下MVVM这种架构,MVC、MVP、MVVM这三者基本上会被人一起问到的,而对于MVVM,google官方推出了一个dataBinding的MVVM的框架,而从学习的角度直接上框架并非是一个非常好的学习方式,所以这次就手把手的一步步通过一个小案例来实现MVVM框架,对其原理有一个本质的了解,这样在下一次学习dataBindin...

webor2006的博客 282

ADS新手必看:ICCAP数据导入与导出CSV的完整流程(附常见问题解决)

本文为ADS新手详细讲解了如何将ICCAP测试数据导入ADS进行仿真分析,并导出为通用CSV格式的完整流程。内容涵盖文件格式解析、导入设置、数据验证、处理技巧及常见问题排查,重点解决了数据文件导入过程中的兼容性与单位映射等核心难点,帮助射频工程师高效连接测量与仿真环节。

peace的博客 557

MVC,MVP,MVVM是什么?

文章目录前言一、MVC是什么?二、MVP是什么?三、MVVM是什么?总结 前言 MVC,MVP,MVVP它们本质上是就是三种逐渐迭代的分离界面和业务逻辑的设计模式。其迭代过程由MVC->MVP->MVVM 提示:以下是本篇文章正文内容,下面案例可供参考 一、MVC是什么? MVC是Model-View-Controller简称,它首次把系统分成Model,View和Controller这三部分,明确的把用户界面和业务逻辑分离开来。 M(Model):这里的Model就是业务逻辑的抽象

Dr_chaser的博客 1411

时钟门控ICG单元的timing问题

本文探讨了数字IC设计中门控时钟(ICG)的时序收敛问题,重点分析了ICG单元在setup时序检查中易出现违例的原因及优化方法。文章指出,由于ICG单元不在时钟树平衡范围内,其时钟路径延迟通常小于后续寄存器,导致setup时序难以满足。提出的解决方案包括:1)将ICG尽量靠近受控寄存器放置;2)使用set_clock_gating_check命令加强时序约束;3)在布局阶段设置负时钟延迟;4)CTS阶段设置插入延迟。同时强调set_clock_gating_check命令对ICG单元同样有效,并介绍了ICG

u011075954的专栏 1104

电源完整性之仿真设计原理

电源完整性(Power Integrity),简称为PI,也就是大家平常听说的PI。PCB板上的电源设计也是非常重要的,不当的设计也会引起很重要的影响。所以电源完整性PI和信号完整性SI,是我们互连设计人员应该同等重视的问题。今天整理本人接触的电源完整性PI的一些原理,从不的角度去看PI,会有不同的理解,下面开始喽!!! 提到互连的电源设计,可能首先想到的电源分配网络(Power Distribution Nets),因为互连电源会有许多种,直流DC和交流AC,还有不同的电压调节模块(VRM)与不同的负载端

刘小同学的博客 7369

Android---MVC/MVP/MVVM的演进

我们通过一个游戏来展现MVC-->MVP-->MVVM 之间的演进。

qq_44950283的博客 1515

从零开始掌握Simscape Multibody:机械系统建模与仿真入门

本文为机械系统建模与仿真入门指南,详细介绍了如何从零开始使用Simscape Multibody。通过构建曲柄摇块机构的实战案例,系统讲解了刚体、关节、约束等核心模块的使用,以及模型验证、参数化设计和多领域系统集成等进阶技巧,帮助工程师和学生高效进行虚拟设计与测试。

weixin_29229261的博客 310

[转]MVC演化史

原文:http://huoding.com/2011/05/02/64 Martin Fowler在他所写的《企业应用架构模式》一书中感慨道:MVC已经成为我们最常误用的模式。人们之所以常常误用MVC,很大程度上是因为混淆了不同的MVC变体。 Classic MVC 大概上世纪七十年代,Xerox PARC的Trygve提出了MVC的概念,并应用在Smalltalk系统中,为了和其它类型...

weixin_34417635的博客 211

别让PEX和后仿真拖后腿:Calibre与Virtuoso ADE联调的那些‘坑’与最佳实践

本文深入探讨了Calibre与Virtuoso ADE在PEX寄生参数提取和后仿真联调中的常见问题与解决方案。针对DRC/LVS验证通过后出现的网表导入错误和仿真波形异常,提供了七大典型场景的实战经验,包括PEX提取模式选择、CalibreView生成细节、环境变量配置等关键环节的最佳实践,助力工程师高效完成芯片设计验证。

weixin_33695450的博客 391

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1154

MVC演化、理解

我们先不解释什么叫MVC,而是慢慢把项目改进发展成MVC项目来理解它。 无论是jsp中嵌入java代码,或者servlet内嵌html都会使代码混乱,不便分工合作和后期开发。我们现在让jsp只负责显示,而代码控制给servlet负责,就是处理请求交给servlet,这样我们就把项目的显示和控制分离开来。 以用户注册作为例子,首先要有页面register.jsp输入用户信息,因为jsp只负责显示

empyan的博客 436

使用Python爬虫抓取政府网站政务信息:公告、通知的自动化抓取与分析

通过结合Requests、BeautifulSoup、Selenium等技术,你能够高效地抓取政府网站的数据,并通过MySQL存储与Pandas分析这些数据。通过自动化手段抓取这些信息,不仅可以提高数据收集的效率,还能够实时获取最新的政务动态,为政策研究、舆情分析等提供宝贵数据。我们将通过Python的Requests、BeautifulSoup、Selenium等工具,结合最新的技术实现一个完整的爬虫系统,帮助你轻松抓取并分析政务信息。通过爬虫,我们可以自动化地从指定网站上抓取公告、新闻、通知等信息。

2201_76125261的博客 1907

MVC-MVP-MVVM

MVC并不适用大型应用 由于MVC的交互过程注定了它的C层会越来越臃肿 中小型项目可以满足需求 如果大型项目使用MVC 我们的维护成本 以及代码的管理 扩展 都会比较麻烦由此我们引入了MVP的使用MVP的交互方式 就是通过接口 将V层的数据更新传递给P层 我们的V层可以对P层进行限制 暴露那些行为 那些方法都是由自己决定的 M层还是负责数据变动以及逻辑 缺点就是当项目过大时 我们的接口会越来越多 导致我们的需求变动时 接口更新和重构会比较麻烦。

2302_76466751的博客 650

概率的接力:拆解大模型“预测下一个词“的底层逻辑

大模型的智能不在于它拥有了意识,而在于它用纯数学的架构,将人类语言的复杂结构压缩为可计算的向量轨迹与概率接力。当我们不再将其拟人化为"思考者",而是视作高维条件概率引擎时,才能真正驾驭它。预测下一个词,从来不是终点,而是起点。未来的核心竞争力,属于那些能洞察其统计本质、善用其模式生成能力,并以人类理性与事实为锚点的协作者。词元的轨迹终会止步于上下文窗口,但对技术底层的清醒认知,才是跨越幻觉、走向真实智能的基石。

AI浩 328

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

web前端面试-- MVC、MVP、MVVM 架构模式对比

这三种都是用于分离用户界面(UI)与业务逻辑的架构模式,旨在提高代码的可维护性、可测试性和可扩展性。

Penk的博客 570

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MVC、MVP、MVVM架构模式深度解析教程

MVC、MVP、MVVM是三种主流的软件架构模式,它们都通过​​分离关注点​​来改善代码的组织方式,使项目更易于开发、测试和维护。这三种模式之间存在清晰的演进关系,核心驱动力是不断降低View和Model之间的耦合度,提升开发效率和可测试性。MVC、MVP、MVVM之间存在清晰的演进关系:​​从MVC到MVP​​:解耦的开始。MVC的主要问题在于View和Model可能存在耦合(View直接监听Model变化),这不利于测试和维护。

Rysxt_的博客 1038

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MVC,MVP 和 MVVM 模式如何选择?

转摘:http://www.linuxidc.com/Linux/2015-10/124622.htm 前言 做客户端开发、前端开发对MVC、MVP、MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式。 网上很多文章关于这方面的讨论比较...

chuiwubi7749的博客 122

MVI + kotlin + Flow封装APP构架

我们可以用interface先定义一个抽象的UI State、events,event和intent是一个意思,都可以用来表示一次事件。@Keep@Keep然后根据具体逻辑定义页面的UIState和UiIntent。通过MainState将页面的不同状态封装起来,从而实现唯一可信数据源不管是MVC、MVP、MVVM还是MVI,主要就是View和Model之间的交互关系不同MVI的核心是数据的单向流动MVI使用kotlin flow可以很方便的实现响应式编程。

金戈鐡馬 652

MVC、MVP 与 MVVM:Android 架构演进之路

本文回顾了Android应用架构的演进历程,从早期的“上帝类”模式到现代的MVVM架构。早期开发中,Activity承担过多职责,导致高耦合、难测试等问题。MVC首次引入分层思想但解耦不彻底。MVP通过Presenter实现彻底解耦,但带来样板代码和生命周期管理等新问题。MVVM借助Jetpack的ViewModel和LiveData,实现了数据驱动的声明式UI更新,解决了生命周期和配置变更问题。当前最佳实践是View Binding配合Kotlin Flow,在保证简洁性的同时提升可维护性。架构演进反映了

csdn_silent的博客 7744

MVVM、MVC、MVP 的区别

用户操作 → View → 触发 ViewModel 命令 → 更新 Model → ViewModel 自动同步到 View(通过数据绑定)。用户操作 → View → 调用 Presenter → Presenter 更新 Model → Presenter 更新 View。用户操作 → Controller → 更新 Model → 通知 View 更新(或直接由 Controller 更新 View)。View:UI 展示,通过数据绑定与 ViewModel 同步。

liuxiaochang_2011的博客 1542

Android应用架构演进之路:从MVC、MVP到MVVM与Clean Architecture

架构设计没有绝对的银弹,只有最适合当前业务场景的选择。对于绝大多数项目:从的模式开始,这是目前投入产出比最高的架构。对于大型复杂项目:在MVVM的基础上引入的分层思想,能让你的应用在未来的迭代中保持清晰和健壮。

m0_65382359的博客 1360

【软件架构设计模式】MVC、MVP、MVVM辨析

一种将数据、界面和控制逻辑分离的架构模式。从 MVC 演化而来的架构,强调 Presenter 统一控制逻辑。适合现代前端框架的一种架构,强调双向数据绑定。

2402_85491806的博客 1297

【软件工程】一文搞懂 MVC、MVP、MVVM 架构

本文介绍了MVC、MVP、MVVM三种常见架构模式,分析其核心思想和适用场景。MVC通过Controller协调View和Model;MVP通过Presenter解耦View和业务逻辑,便于测试;MVVM采用数据绑定实现响应式更新,减少样板代码。文章通过代码示例对比三种架构实现方式,并提出选用建议:服务端渲染适合MVC,传统Android项目可选MVP,现代客户端推荐MVVM。

欢迎来到我的优快云个人博客主页! 2210

iOS 设计模式 浅析MVC、MVP、MVVM

一、MVC (Model、View、Controller) 苹果官方推荐的架构模式(MVC),最核心的就是通过Controller层来进行控制,首先看一下官方提供的MVC示意图,如下图所示: 1、MVC各层职责 1.1、controller层 生成view,然后组装view 响应View的事件和作为view的代理 处理view的生命周期 处理界面之间的跳转 调用model的数据获取接口,拿到返回数据,处理加工,渲染到view显示 1.2、model层 业务逻辑封装 提供数据接口给controller

清幽竹客 2307

Android UI 架构演进:从 MVC 到 MVP、MVVM、MVI

为了优化代码设计,业界先后提出了 MVC、MVP、MVVM 和 MVI 等架构设计。这四个模式讨论是 “如何管理 UI” 这个话题,采用的手段都是 “关注点分离”,只是实现的细节不同。最开始是没有采用任何模式的状态,不管是视图代码还是表现逻辑全都写在 Activity 里面,很明显这样的代码耦合度非常高,难以进行维护和测试,可读性也不好。MVC 其实是 Android 默认的设计,MVC 里将代码分为三个部分:MVC 初步解决了 Activity 代码太多的问题,但也有缺点:我们的初衷 Activity /

m0_64365896的博客 1334
上一篇: Android集成阿里云推送功能
下一篇: Dart数据类型
SuperMonsterH
博客等级 码龄9年 11粉丝 60原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperMonsterH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值