表现层框架设计之表现层设计模式_3.MVVM模式

1.MVVM模式 

        MVVM模式正是为解决MVP中UI种类变多,接口也会不断增加的问题而提出的。

        MVVM模式全称是模型-视图-视图模型(Model-View-ViewModel),它和MVC、MVP类似,主要目的都是为了实现视图和模型的分离,不同的是MVVM中,View与Model的交互通过ViewModel来实现。ViewModel是MVVM的核心,它通过DataBinding实现View与Model之间的双向绑定,其内容包括数据状态处理、数据绑定及数据转换。例如,View中某处的状态和Model中某部分数据绑定在一起,这部分数据一旦变更将会反映到View层。而这个机制通过ViewModel来实现。

2.MVVM流程设计

         ViewModel,即视图模型,是一个专门用于数据转换的控制器,它可以把对象信息转换为视图信息,将命令从视图携带到对象。它通过View发布对象的公共数据,同时向视图提供数据和方法。View和ViewModel之间使用DataBinding及其事件进行通信。View的用户接口事件仍然由View自身处理,并把相关事件映射到ViewModel,以实现View中的对象与视图模型内容的同步,且可通过双向数据绑定进行更新。因此,程序员只需编写包含声明绑定的视图模版,以及ViewModel中的数据变更逻辑,就能使View获得响应式的更新。MVVM流程设计如图1所示。

3.MVVM适用场景

         在MVVM模式下View和Model不能直接通信,两者的通信只能通过ViewModel来实现。ViewModel通常要实现一个观察者,当数据发生变化,ViewModel能够监听到数据的变化,然后通知对应的视图做自动更新;而当用户操作视图,ViewModel也能监听到视图的变化,再通知数据做改动,从而形成数据的双向绑定。这使得MVVM更适用于数据驱动的场景,尤其是数据操作特别频繁的场景。

        但也正是由于数据和视图的双向绑定,导致出现问题时不太好定位来源,有可能由数据问题导致、也有可能由业务逻辑中对视图属性的修改导致。若项目中有计划采用MVVM,倾向建议使用官方的架构组件ViewModel、LiveData等去实现MVVM。

        (1)关于ViewModel
        ViewModel类的设计目的是以一种关注生命周期的方式存储和管理与UI相关的数据。
例如:Activity在配置发生改变时(屏幕旋转),Activity就会重新创建,onCreate()方法也会重新调用。我们可以在onSaveInstanceState()方法中保存数据,并从onCreate()方法中通过Bundle恢复数据,但这种方法只适用于可以对其进行序列化的少量数据,而不适用于潜在的大量数据。使用ViewModel的话ViewModel会自动保留之前的数据并给新的Activity或Fragment使用。直到当前Activity被系统销毁时,Framework会调用ViewModel的onCleared()方法,我们可以在onCleared()方法中做一些资源清理操作。

        (2)关于LiveData
        LiveData是一个可观察的数据持有者类。与常见的观察者不同,LiveData是有生命周期感知的。这意味着它尊重其他应用程序组件的生命周期,比如Activity、Fragment或Service。这种感知确保LiveData只更新处于生命周期状态内的应用程序组件。

        LiveData是由observer类表示的观察者视为处于活动状态,如果其生命周期处于STARTED或RESUMED状态。LiveData会将观察者视为活动状态,并通知其数据的变化。LiveData未注册的观察对象以及非活动观察者是不会收到有关更新的通知。

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

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

相关文章

深度学习之基于Yolov3的行人重识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 行人重识别(Person Re-Identification,简称ReID)是计算机视觉领域…

新品:LoRa扩频调制SOC无线模块-内置ARM、工业级晶振

LoRa-STM32WLE5是思为无线最新研发的一款SOC无线模块,模块主芯片采用了ST 公司的STM32WLE5芯片研发。模块采用LoRa调制,内置工业级晶振,并基于高性能的ArmCortex-m4 32位RISC核心,工作频率高达48 MHz。这个核心实现了一套完整的DS…

项目十二:简单的python基础爬虫训练

许久未见,甚是想念,今日好运,为你带好运。ok,废话不多说,希望这门案例能带你直接快速了解并运用。🎁💖 基础流程 第一步:安装需要用到的requests库,命令如下 pip inst…

【漏洞复现】智慧校园(安校易)管理系统 FileUpProductupdate.aspx 任意文件上传漏洞

0x01 产品简介 "安校易"是银达云创公司基于多年教育市场信息化建设经验沉淀,经过充分的客户需求调研,并依据国家"十三五”"教育信息化建设规范而推出的综合互联网教育信息化解决方案。“安校易“以物联网技术为基础,以学…

【Python小案例】Python+mysql+PyQt5健康体检报告查询

下载安装Python3.7.8 python官网:https://www.python.org/ PyQt5配置 安装PyQt5 pip install PyQt5pip install qt5_toolspytcharm创建项目 配置外部工具 QTDesigner的Arguments语句不用填 QTDesigner的Working directory语句:$ProjectFileDir$ Pyuic的Argume…

【职场心灵伴侣】文心一言智能体

【文心一言】智能体 写在最前面名称和简介:职场心灵伴侣AI生成头像添加工具智能体调优 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限…

智能农业时代:智能生态网络与数据流通的融合

随着科技的不断进步,智能农业已经成为现代农业发展的重要趋势。智能生态网络(IEN)作为一种集成化的解决方案,通过整合先进技术和数据要素流通,为智能农业的发展提供了强大的动力。在本文中,我们将探讨IEN在…

鸿蒙开发配置官方地图

一共需要配置 p12 p7b cer csr 四个文件 p12文件配置 注意创建文件名必须是.p12 到AGC创建项目 AppGallery Connect 添加自己的项目名称 我没有开启 暂时不需要 看个人需求 下载刚创建的cer证书 回到我的项目中 点击刚创建的项目 点击这里 四个文件齐全了 "metadata&qu…

C++初阶之深入模板

一、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成…

基于STM32实现智能空气质量监测系统

目录 文章主题环境准备智能空气质量监测系统基础代码示例:实现智能空气质量监测系统 配置传感器并读取数据数据处理与显示数据存储与传输应用场景:室内环境监测与空气质量控制问题解决方案与优化收尾与总结 1. 文章主题 文章主题 本教程将详细介绍如何…

如何在 Ubuntu 24.04 (桌面版) 上配置静态IP地址 ?

如果你想在你的 Ubuntu 24.04 桌面有一个持久的 IP 地址,那么你必须配置一个静态 IP 地址。当我们安装 Ubuntu 时,默认情况下 DHCP 是启用的,如果网络上可用,它会尝试从 DHCP 服务器获取 IP 地址。 在本文中,我们将向…

登录接口测试

登录接口测试 数据驱动

我把PostgreSQL最核心的插件撸干净了!!!

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…

景源畅信:小白做抖音运营难吗?

在数字化时代,社交媒体已成为人们生活的一部分,而抖音作为其中的翘楚,吸引了众多希望通过平台实现自我价值和商业目标的用户。对于刚入门的小白来说,运营抖音账号可能会遇到不少挑战。接下来,我们将详细探讨这一话题&a…

法那科机器人M-900iA维修主要思路

发那科工业机器人是当今制造业中常用的自动化设备之一,而示教器是发那科机器人操作和维护的重要组成部分。 一、FANUC机械手示教器故障分类 1. 硬件故障 硬件故障通常是指发那科机器人M-900iA示教器本身的硬件问题,如屏幕损坏、按键失灵、电源故障等。 2…

NFT Insider #131:Mocaverse NFT市值破3.5万ETH,The Sandbox 参加NFCsummit

引言:NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto (https://twitter.com/beep_crypto)联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、…

EasyExcel的CellWriteHandler注入CellStyle不生效

文章目录 一、问题描述二、问题排查三、解决问题 一、问题描述 最近发现原本项目的导出excel功能中,写的那些 CellWriteHandler 去改变样式的代码全都不生效了 二、问题排查 由于代码都是没有改动的,加上最近有升级过 easyExcel 的版本,由…

YOLOv5改进 | 主干网络 | 用EfficientNet卷积替换backbone【教程+代码 】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在YOLOv5的GFLOPs计算量中,卷积占了其中大多数的比列,为了减少计算量,研究人员提出了用EfficientNet代替b…

获得 AI Applied Skills 凭证:微软在线评估认证的注意事项

在你踏上微软的亚洲AI奥德赛之旅,完成基础课程学习后,你可以继续进行相应的评估,在交互式实验室体验中完成一系列任务,通过线上即时评估赢得认证。通过本文的介绍,可以帮助你了解评估认证的一些细节以及注意事项&#…

一般EI论文的格式是什么样的?

论文应该符合会议的提交要求和模板,包括页面格式、字体、字号、行距等。可以在特定会议的官方网站上找到详细的提交指南和模板。 EI会议论文的格式通常遵循以下基本结构: 标题和作者信息:论文标题应该简洁明了,能够准确概括您研究…