MVC,MVP和MVVM框架之间的理解

news2024/11/14 14:12:27

一、MVC的理解

1、MVC是什么

MVC, 即Model-View-Controller, 基于页面逻辑的修改要多于业务逻辑, 分离两种逻辑减少类代码的修改

  • Model: 即数据层, 负责处理业务逻辑, 监听网络与数据库接口
  • View: 即界面(UI)层, 显示来源于Model的数据
  • Contoller: 即逻辑层, 传递用户的交互和更新Model的数据

2、MVC流程图

3、MVC的优点

MVC模式, 分离类的UI与业务职责, 增加可测试性与可扩展性.

Model不引用任何Android类, 允许单元测试(Unit Test).

Controller含有View的引用, 不引用Android类, 允许单元测试.

View满足单一职责原则(SRP), 传递事件至Controller, 展示Model数据, 不包含业务逻辑, 允许UI测试.

4、MVC的缺点

1.View既依赖于Controller又依赖于Model. 在修改UI逻辑时, 也需要修改Model, 降低架构的灵活性. View与Model的职责部分重叠, 过于耦合, 在处理UI逻辑时, 被动模式与主动模式都会产生若干问题.
2.在被动模式中, Controller通知Model更新数据, 并通知View显示. 对于UI逻辑, 如果View处理, 单元测试会遗漏逻辑; 如果Model处理, 则隐式地依赖于View, 导致模块增加耦合
3.MVC架构含有致命问题, 即View同时含有Controller与Model的引用; UI逻辑同时存在于View与Model之间. 这些问题导致业务逻辑与UI逻辑无法分离, 增加模块耦合, 影响重构. 这些问题在MVC的进化版MVP中逐步解决

 5、适用场景

项目体量较小,维护频率不高的应用

 二、MVP理解

1、mvp是什么

MVP属于MVC的演化版本,目的是让Model和View完全解耦

  • View:对应于Activity,负责View的绘制以及与用户交互
  • Model:业务逻辑和实体模型
  • Presenter:负责完成View于Model间的交互

2、MVP流程图

 

3、MVP优点

1.降低耦合度
2.模块职责划分明显
3.利用测试驱动开发
4.代码复用复用性和灵活度增加

4、MVP缺点

由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了

5、适用场景

项目如果过于庞大,且需要频繁对于view进行调整或者变更的项目不适用于此模式,常规的中小型应用适合于当前业务需求

 三、MVVM理解

1、MVVM是什么

Model:数据层,包含数据实体和对数据实体的操作
ViewModel:关联层,将Model和View进行绑定,Model或者View更改时,实时刷新对方。ViewModel只做和业务逻辑相关的工作,不涉及任何和UI相关的操作,不持有控件引用,不更新UI
View只做和UI相关的工作,不涉及任何业务逻辑,不涉及操作数据,不处理数据。UI和数据严格的分开

2、MVVM流程图

3、MVVM解析

View显而易见Activity/Fragment便是MVVM中的View,当收到ViewModel传递过来的数据时,Activity/Fragment负责将数据以你喜欢的方式显示出来。View还包括ViewDataBinding,图中并没有体现。
ViewModelViewModel作为Activity/Fragment与其他组件的连接器。负责转换和聚合Model中返回的数据,使这些数据易于展示,并把这些数据改变即时通知给Actvity/Fragment。ViewModel是具有生命周期意识的,当Activity/Fragment销毁时ViewModel的onClear方法会被回调,你可以在这里做一些清理工作。LiveData是具有生命周期意识的一个可观察的数据持有者,ViewModel中的数据有LiveData持有,并且只有当Activity/Fragment处于活动时才会通知UI数据的改变,避免无用的刷新UI。
ModelRepository及其下方就是model了。Repository负责提取和处理数据。数据来源可以是本地数据库,也可以来自网络,这些数据统一有Repository处理,对应隐藏数据来源以及获取方式。
Binder绑定器Android中的数据绑定技术由DataBinding和LiveData共同实现。当Activity/Fragment接收到来自ViewModel中的新数据时(由LiveData自动通知数据的改变),将这些数据通过DataBinding绑定到ViewDataBinding中,UI将会自动刷新。

3、MVVM本质

 1.解耦,区别于MVC不会产生巨量代码,区别于MVP不会产生大量接口
2.职责更加明确,在mvp模式中,p需要持有V的引用,才能去刷新UI,在MVVM模式中,View和Model使用databingding进行双向绑定,一方改变会直接通知另外一方,使得viewModel能专注于业务逻辑的处理,而不需要去关心UI刷新

4、DataBinding和MVVM关系

 MVVM是一种架构模式,DataBinding是一个实现数据和UI绑定的框架,是实现MVVM模式的工具

5、MVVM优点

1.使得M,V,VM的解耦更加彻底,在mvp模式中,p需要持有V的引用,才能去刷新UI,在MVVM模式中,View和Model使用databingding进行双向绑定,一方改变会直接通知另外一方,使得viewModel能专注于业务逻辑的处理,而不需要去关心UI刷新
2.不会像MVC一样导致Activity中代码量巨大,也不会像MVP一样出现大量的View接口(Presente与View是通过接口进行交互的)。项目结构更加低耦合。

6、MVVM缺点

1.数据绑定使得Bug很难被调试
2.一个大的模块中,model也会很大,虽然使用方便了也很容易保证了数据的一致性,但是长期持有,不释放内存,就造成了花费更多的内存
3.数据双向绑定不利于代码重用。客户端开发最常用的重用时View,但是数据双向绑定技术,让你在一个View都绑定了一个model,不同模块的model都不同,那就不能简单重用View了

7、MVVM适用场景

业务处理逻辑大多数在后端的情况下前端只要做展示而不需要做大量的业务处理的项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/196805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面向对象三大特征之三:多态、内部类、常用API

目录 面向对象三大特征之三:多态 多态的概述、形式 多态的优势 多态下引用数据类型的类型转换 多态的案例 内部类 内部类的概述 内部类之一:静态内部类[了解] 内部类之二:成员内部类[了解] 内部类之三:局部内部类[了解]…

智能DTU

什么是DTU百度百科:DTU (Data Transfer unit),是专门用于将串口数据转换为 IP 数据或将 IP 数据转换为串口数据通过无线通信网络进行传送的无线终端设备。DTU目前现状在物联网大爆发的时代,除了各种传感器,DTU 设备也得到了很大的…

免费舆情监控工具有哪些,TOOM加强舆情监控提高应对能力

免费舆情监控是指通过免费的网络舆情监控工具,对网络上关于话题、公司、产品或者人物的舆论进行监测和分析,旨在帮助用户了解社会舆论的变化和趋势。免费舆情监控工具一般提供基本的舆论监测功能,功能较为有限,但是对于个人用户或…

JavaWeb-HTML入门

目录一、认识HTML二、学习HTML语法2.1 注释标签2.2 标题标签2.3 段落标签 p2.3 换行标签2.4 字体设置标签2.5 图片标签2.6 超链接标签2.7 表格标签2.8 列表标签2.9 表单标签2.10 select下拉菜单2.11 textarea多行编辑框2.12 无语义标签一、认识HTML HTML的全称为超文本标记语言…

车载网络 - Autosar网络管理 - 处理逻辑时间参数

前面已经将Autosar常用的缩写名词、运行状态机、个状态报文发送状态等基础信息进行了说明,下面就剩下时间参数和网络管理逻辑,如果要讲处理的逻辑的话我个人觉得还是先要把时间参数介绍下,毕竟时间参数贯穿于整个处理逻辑中。 时间参数: 作为衡量一个软件产品性能的重要指标…

简单地了解NLP

一、基本概念 自然语言处理(NLP)是研究人与计算机交互的语言问题的一门学科。它研究人与计算机之间用自然语言进行有效通信的理论和方法。融语言学、计算机科学、数学等于一体的科学。自然语言处理的工作原理是先接收到通过人类使用演变而来的自然语言&…

连锁店销量预测

目录任务数据解读及简单探索解决思路传统机器学习方法代码评估深度学习方法代码评估建议参考文献任务 利用深度学习、强化学习等机器学习手段为某连锁商店预测每个商店未来12周的销售额进行估计,以便对商店的经营更好掌握和对库存调拨更好管理。 数据解读及简单探…

(十二) Docker-compose容器编排

Docker-compose一、概述1、简介2、作用3、下载二、核心概念三、使用步骤四、Compose常用命令五、Compose编排微服务实践一、构建项目的镜像1、建立数据库表2、POM文件3、YAML4、主启动类5、业务类1、生成简易代码2、配置类3、实体类4、Mapper5、Service6、Controller6、打 Jar …

3.SQL

梳理 名词解释 视图:视图是一个虚表,其本质就是一条SELECT语句,而查询结果被赋予了一个名字,也即视图名字。或者说视图本身不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化时&#x…

【JavaGuide面试总结】Spring篇·中

【JavaGuide面试总结】Spring篇中1.谈谈自己对于 AOP 的了解2.Spring AOP 和 AspectJ AOP 有什么区别?3.AspectJ 定义的通知类型有哪些?4.Spring AOP多个切面的执行顺序如何控制?5.说说自己对于 Spring MVC 了解?6.Spring MVC 的核心组件有哪…

企业数字化转型的五大关键要素

数字化转型是顺应新一轮科技革命和产业变革趋势,不断深化应用云计算、大数据、物联网、人工智能、区块链等新一代信息技术,激发数据要素创新驱动潜能,打造提升信息时代生存和发展能力,加速业务优化升级和创新转型,改造…

软测(概念) · 开发模型 · 软件的生命周期 · 瀑布模型 · 螺线模型 · 增量模型 · 迭代模型 · 敏捷模型 · scrum

一、开发模型的由来二、软件的生命周期三、瀑布模型(Waterfall Model)四、螺线模型(Spiral Model)五、增量模型(Incremental Model)六、迭代模型(Rational UnifiedProcess)七、敏捷模…

daz ue和maya插件配置

daz ue插件配置用这个插件方便导入材质,毕竟材质球还是挺多的我安装的时候DAZ Install Manager需要定位,没成功就直接用dll放在daz安装里面也可以直接用,daz ue插件放在插件目录daz maya2022插件配置首先用DAZ Install Manager安装daz maya插…

进程间通信之共享内存(简单介绍消息队列和信号量)

进程间通信之共享内存system V共享内存共享内存示意图常见的共享内存操作共享内存数据结构共享内存函数消息队列信号量📌————本章重点————📌 🔗基本掌握system V共享内存的使用方法 🔗了解消息队列🔗了解信号量…

vue v-model的详细介绍

v-model是什么? v-model 是Vue框架的一种内置的API指令,本质是一种语法糖写法。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理 为什么使用v-model? v-model指令可以在表单input、textarea以及select元素上…

Power BI中如何实现移动平均功能

一、移动平均 移动平均,是一种常用的统计分析方法,它是指将一定时间范围内的数据,按一定的时间间间隔进行计算平均,然后将平均值形成一条折线。常用的时间间隔有10天、20天、30天、60天等。 当原数据折线图波动比较大时&#xff…

利用GPAC生成MP4文件

GPAC主要针对学生和内容创作者,代表了一个跨平台的多媒体框架,开发人员可以使用它在 LGPL 许可下制作开源媒体。GPAC多媒体框架兼容范围广泛的流行文件类型,从常见格式(如 AVI、MPEG 和 MOV)到复杂格式(如 MPEG-4 系统或 VRML/X3D)和 360 电影…

哈工大机器学习复习笔记(二)

本篇文章是在参考西瓜书、PPT课件、网络上相关博客等资料的基础上整理出的机器学习复习笔记,希望能给大家的机器学习复习提供帮助。这篇笔记只是复习的一个参考,大家一定要结合书本、PPT来进行复习,有些公式的推导最好能够自己演算一遍。由于…

JVM结构 类加载

类加载 类加载子系统 类加载器子系统负责从文件系统或者网络中加载class文件。classLoadr只负责class文件的加载,至于它是否可以运行,则由Exception Engine(执行引擎)决定。加载类的信息存放于一块成为方法区的内存空间 class fi…

【GPLT 二阶题目集】L2-007 家庭房产

给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号…