MVVM框架详解

C++:实现mvvm 最近做了一段时间WPF,印象最深刻就是里面的mvvm模式,打算用C++做一个雏形,并为以后的项目做准备。 首先讲一下我对mvvm的理解(可能会有偏差,各位大佬可以指点),mvvm其实可以分开理解为 model , view ,viewmodel 。model提供数据模型,view就是ui,viewmodel做一些跟ui无关的逻辑(更新数据等),跟传统的mvc对比,control很难摆脱与view的耦合,比如更新ui元素等,长期下来,controler的代码只会越来越臃肿。mvvm是一套基于数据绑定的设计模 阅读详情
AI摘要

本文介绍了MVVM架构模式,它萌芽于微软基于Windows的用户界面框架WPF,是用于构建用户界面的软件架构模式。阐述了其本质是解耦,通过数据绑定实现数据和UI自动同步。还分析了各层原理、优缺点,指出使用时要注意双向数据绑定实现和各层生命周期管理。

1.背景

        MVVM就是Model-View-ViewModel,它萌芽于 2005 年微软推出的基于 Windows 的⽤户界⾯框架 WPF ,前端最早的 MVVM 框架 knockout 在 2010 年发布。其是一种用于构建用户界面的软件架构模式,宽泛应用于前端和客户端。

2.MVVM本质

        MVVM的本质是解耦。MVVM的主要目标是将应用程序的UI与其底层数据模型分离,通过数据绑定实现数据和UI的自动同步,从而降低代码的耦合度,提高应用程序的可维护性和可测试性。

        它通过将UI逻辑从View中分离出来,将数据处理逻辑从View和Model中分离出来,使得每个组件的职责更加明确,代码更易于组织和维护。ViewModel充当着View和Model之间的桥梁,负责将Model中的数据转换成View可用的形式,并且通过数据绑定将数据自动同步到View上。这种双向绑定使得UI的更新变得自动化,开发者只需要专注于数据的处理和业务逻辑的编写,而无需过多关心UI的更新。

3.MVVM原理

框架原理图

这个图是我按自己的理解画的,如果熟悉这个框架的人看这个图就完全懂了,下面是关于上面这个图的一些名词解释:

大前端:直接面向客户的应用或者系统,可以简单的理解为就是客户端和前端。

Bind:绑定回调,在view层绑定viewmodel的函数。

OnPropChanged:数据变更,Prop就代表view层的各种属性,viewmodel通过OnPropChanged监听view层,做一些业务逻辑,起到一个自动同步的作用。

Subscribe:订阅,即订阅事件,viewmodel调用model层的数据。

OnEvent:事件响应,即model层响应viewmodel的调用,有很多类型的事件,比如广播事件(Event),点对点事件(P2PEvent)。

Call:回调,就是model层回调Service层的服务。

OnCallback:响应回调,Service将各种服务api打包给model层使用。

下面将介绍图上的各个层级功能和原理,我采用自上而下的方式去理解和讲述:

3.1 View层

View(UI层):负责UI展示,绑定ViewModel中的属性,触发ViewModel中的行为命令以及呈现由ViewModel提供的数据。一般这一层是用来定义结构、布局,它展示的是 ViewModel 层的数据和状态。View 层不负责处理状态, View层做的是数据绑定的声明、 指令的声明、 事件绑定的声明。

3.2 ViewModel层

ViewModel(视图模型层的业务逻辑):把View需要的层数据暴露,负责给View提供展示数据,并实现view层的行为指令。 ViewModel 底层会做好绑定属性的监听,通过OnPropChanged自动更新同步。

3.3 Model层

Model(模型层):是源数据提供者(来自数据库、网络请求等),将Service提供的服务组合成为业务模型并提供给ViewModel使用。

3.4 Service层

这一层其实就是服务器和跨平台层,将数据库、网络请求这些API,包装好给给model层使用。

4.MVVM优缺点

优点:

1.分离视图(View)和模型(Model),将业务逻辑放在ViewModel层,从而实现了各个组件之间的解耦,降低代码耦合,提⾼视图或者逻辑的重⽤性。

2.⾃动更新 dom: 利⽤双向绑定的核心思想 , 数据更新后视图⾃动更新 , 让开发者从繁琐的⼿动 dom 中解放。

缺点:

1.调试困难,由于数据绑定,Bug可能不易调试,一个问题可能会影响到多个地方,使得定位问题变得复杂。

2.内存消耗,在大型模块中,如果Model长期不释放内存,可能会导致内存消耗增加。

5.MVVM和MVC的区别

MVVM一种基于 MVC 演变而来的架构模式,MVC中Controller演变成MVVM中的viewModel。

两者之间最大的区别就是:MVVM 实现了数据的双向绑定,实现了View和Model的自动同,即视图的变化会自动反映到视图模型和模型中,模型的变化也会实时更新到视图上,大大提高了开发效率和用户体验;而 MVC 通常需要开发者手动处理视图和模型之间的数据同步,属于单向绑定,即模型变化更新视图,视图变化需通过控制器更新模型。

6.回顾总结

上面已经把这个框架给讲的很详细了,请对上面的内容做一个简单的总结:

MVVM,自上到下分析,view层负责UI展示,定义结构、布局等等,ViewModel层负责处理业务,监听view层的变化以及通知去更新,Model层负责提供源数据给ViewModel使用。即通过清晰的分层和双向数据绑定机制,结合使用观察者模式,使得开发人员可以更加专注于业务逻辑的实现,而不必担心UI的更新,从而达到解耦的目的。

使用这个框架写代码需要注意的事项:

1.各层之间的双向数据绑定怎么去实现,这个是使用扩展和扩展点机制并结合使用观察者模式实现的,扩展和扩展点机制本质就是一些类似于宏的名称,去相互协作达到插排和插头的一个效果。

2.ViewModel的生命周期是由View管理的,View的生命周期是由管理者控制的,Model的生命周期是由框架统一管理的。 

感受:

关于这篇文章,我本来想结合代码去讲解的,但我的项目太大了,放代码的话可能更多的读者和初学者看不懂,本篇就主要讲原理了,对于C++的选手,不管是前端还是客户端,还是后端,这个框架都涉及的有,全球有很多用户特别大的软件都使用的是这个框架,要多去学习框架,提升自己的项目代码能力,如果觉得我的文章对你有帮,请点赞收藏加关注,谢谢大家。

MVVM框架 在WPF开发中,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如需要更换界面时,逻辑代码修改很少,甚至不用修改。 与WinForm开发相比,我们一般在后置代码中会使用控件的名字来操作控件的属性来更新UI,而在WPF中通常是通过数据绑定来更新UI;在响应用户操作上,WinForm是通过控件的事件来处理,而WPF可以使用命令绑定的方式来处理,耦合度将降低。 一、MVVM框架简介 1. 什 阅读详情

相关推荐

MVVM简介

目录 点睛 什么是MVVM 为什么要使用MVVM MVVM的组成部分 点睛 View是视图层,也就是用户界面。前端主要由HTML和CSS来构成,为了更方便地展现ViewModel或者Model层的数据。 Model是指数据模型,泛指后端进行的各种业务逻辑处理和数据操控,主要围绕数据库系统展开。这里的难点主要在于需要和前端约定统一的接口规则。 ViewModel由前端开发人员组织生成和维护的视图数据层。在这一层,前端开发者从后端获取得到Model数据进行转换出来,做二次封装,以生成符合View

实践求真知 1万+

MVVM架构详解:前端开发的理想选择

在前端开发领域,架构设计始终是一个热门话题。随着应用程序变得越来越复杂,选择合适的架构变得尤为重要。在众多架构模式中,MVVM(Model-View-ViewModel)架构因其独特的优势和广泛的应用受到了开发者的青睐。MVVM架构是MVC(Model-View-Controller)的一种变体,特别适用于数据绑定和视图逻辑处理。这篇文章将详细探讨MVVM架构的各个方面,帮助读者更好地理解和应用这一架构模式。

cooldream2009的博客 7940

MVVM架构详解:从核心机制到Qt框架落地实践

在客户端开发中,随着业务逻辑与界面代码的纠缠日益复杂,MVVM模式正成为数据驱动界面设计的核心方法论。该模式通过模型(Model)、视图(View)与视图模型(ViewModel)的分层协作,利用数据绑定、命令驱动和属性通知机制,彻底分离了用户界面与业务规则。掌握这一架构,不仅能显著提升代码的可测试性与维护性,更是使用Qt Quick与QML进行高效应用开发的关键技能。本文从模式的核心概念出发,剖析其与传统MVC/MVP的差异,通过订单列表等实际案例,讲解在Qt/C++环境中落地一个轻量级MVVM框架的完整

weixin_30702441的博客 514

MVVM风格架构

MVVM是Model-View-ViewModel的简写。它本质上就是MVC的改进版。MVVM就是将其中的View的状态和行为抽象化,让我们将视图UI和业务逻辑分开。当然这些事ViewModel已经帮我们完成了,它可以取出Model的数据同时帮忙处理View中由于需要展示内容而涉及的业务逻辑。微软公司的WPF带来了新的技术体验,如Silverlight、声频、视频、3D、动画……这导致了软件UI层更加细节化、可定制化。

leva的博客 5185

CPRI原理及应用--帧结构

对于CPRI 控制字,协议将1个超帧(256基本帧)的控制数据划分为一个“子通道”,将子通道内超帧内的控制字进行行列划分,分为4列X64行,每64个基本帧组成1列。如下图所示。每个Xs子通道内Ns的定义基本相同,在做控制字设计时,主要已Xs和Ns和X.Y.Z开展控制字映射。

u014035968的博客 2325

大模型和任务型对话系统如何结合

三种方法都是基于prompt1.prompt中定义大量可分类的domain标签,每种标签含有的样例。走对话系统nlu常规步骤,domain分类,意图分类,slot提取等。缺点:需要很复杂的prompt,写的未必完善。需要多次调用llm2.prompt中定义每种query下可以调用的functioncall。3.也是基于prompt,可以管理对话主题,实现更丰富的话题流转。面向某个具体领域,没有细分的domain类别。

qq_29837229的博客 2452

MVVM架构

MVVM(Model-View-ViewModel)和MVC、MVP一样,也是一种项目架构模式,目前广泛应用在Android程序设计。MVVM主要由三部分组成,Model数据模型部分,View视图展示部分,ViewModel则是一个特殊的部分,为视图与数据模型的中间件。大概的结构如下图这张图中,将程序分为了若干层。其中,UI控制层包含了我们平时写的Activity、Fragment和布局文件等与界面相关的东西。

云追月的专栏 6241

STM32L431电池供电项目实战:用STOP2模式把功耗降到5uA以下(CubeMX配置详解)

本文详细介绍了如何在STM32L431电池供电项目中利用STOP2模式实现5μA以下的超低功耗设计。通过CubeMX配置、硬件优化和软件策略,成功将农业温湿度监测节点的待机功耗控制在4.7μA,确保CR2032电池供电下3年以上的工作寿命。文章包含完整的低功耗实现路径和实测数据,特别适合物联网边缘设备开发者参考。

weixin_30345577的博客 393

Android MVVM 应用框架构建过程详解

概述 说到Android MVVM,相信大家都会想到Google 2015年推出的DataBinding框架。然而两者的概念是不一样的,不能混为一谈。MVVM是一种架构模式,而DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个工具。 之前看过很多关于Android MVVM的博客,但大多数提到的都是DataBinding的基本用法,很少有文章仔细讲解在Android...

journeyIT的博客 833

【地图模块算法】二维全局地图的开源方案及对比--gmapping、hector、karto、cartographer

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、gmapping算法建图【基于Raoo-Blackwellized粒子滤波(RBPF)算法】1.gmapping理论(1)gmapping的工作原理(2)gmapping的算法流程(3)gmapping论文理论2.gmappingROS工程框架解析(1)gmapping的功能包架构(2)gmapping订阅和发布的话题(3)gmapping算法建图参数(4)gmapping源码

qq_35635374的博客 3438

iOS远程真机之ios-minicap安装使用完全指南

minicap 是开源项目 STF 中的高速截图工具。STF利用此工具不断的传输图片信息并在web端绘制实现 以前只有Android版本,最近有新的ios版本,现在就安装过程中遇到的一些问题进行分享(ps:感谢sorccu 在issue里面给我的指点) 首先上地址:https://github.com/openstf/ios-minicap 你可以git clone或者直接下载zip包。

甫式人生 1万+

android mvvm流程图,MVVM框架模式详解

MVVM 定义MVVM 是 Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对 View 和 ViewModel 的双向数据绑定,这使得 ViewModel 的状态改变可以自动传递给 View,即所谓的数据双向绑定。在 MVVM 的框架下视图和模型是不能直接通信的。它们通过 ViewModel 来通信,ViewModel 通常要实现一个 observe...

weixin_42565755的博客 1242

【数据集】未来不同情景下预测数据:如人口、土地利用等

未来不同情景下预测数据:如人口、土地利用等

WW、forever的博客 2996

Android 框架MVVM详解

导读 我们一步步来,从MVC开始。 MVC 我们都知道,模型——视图——控制器。为了使得程序的各个部分分离降低耦合性,我们对代码的结构进行了划分。 他们的通信方式也如上图所示,即View层触发操作通知到业务层完成逻辑处理,业务层完成业务逻辑之后通知Model层更新数据,数据更新完之后通知View层展现。在实际运用中人们发现View和Model之间的依赖还是太强,希望他们可以绝对独立的存在,

csdn_aiyang的博客 5635

电池管理系统(BMS)软件:CATL BMS二次开发_(1).CATL BMS软件概述

CATL BMS软件的保护机制是确保电池组安全和可靠运行的关键部分。通过高精度的传感器和智能算法,BMS可以实时监测电池组的状态,及时采取保护措施。二次开发中,可以根据特定的应用需求,增加新的传感器、优化算法、扩展通信接口等,进一步提高系统的性能和可靠性。维护和扩展则是确保系统长期稳定运行的重要手段。希望以上内容对您理解CATL BMS软件的保护机制有所帮助。如果您有任何进一步的问题或需要更详细的解释,欢迎随时提问。

zhubeibei168的博客 1459

DeepLabv3+改进专栏

🔥【DeepLabv3+改进专栏!探索语义分割新高度】🌟 你是否在为图像分割的精度与效率发愁?📢 本专栏重磅推出:✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化✅ 即插即用模块:ASPP+升级、解码器。

AIcurator的博客 2576

MVVM框架详解:原理、实现与框架对比

它通过将UI逻辑与业务逻辑分离,简化了开发过程,提高了代码的可维护性和可测试性。数据绑定是MVVM模式的核心机制,它建立了View与ViewModel之间的自动同步关系。MVVM模式通过分离关注点、提高代码可测试性和可维护性,为复杂UI应用程序的开发提供了强大的架构支持。:作为View和Model之间的中介,负责处理View的所有显示逻辑和用户交互逻辑。随着技术的发展,MVVM模式将继续演化,但其核心原则——分离UI与业务逻辑,通过数据绑定实现松耦合——将保持不变,继续为开发高质量应用程序提供坚实的基础。

冰茶的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MVVM框架使用之xml详解

(字体放大会促进学习兴趣哦) 一 DataBinding的标签 (compilerCommon这个jar包中的android/databinding/tool/store/LayoutFileParser.java这个类中找到。) - layout标签(根标签) - data标签:class属性 - variable标签:type属性、name属性 - import标签:type属性、alias属性 layout标签 1 layout标签内部只能有一个直接子view,多于1个就会报错,这个和Scr

li6472的博客 1013

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

假人有限元模型

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

Android MVVM框架详解与应用

MVVM是Model-View-ViewModel的缩写,是一种基于数据绑定的架构模式,用于设计和组织应用程序的代码结构。它将应用程序分为三个主要部分:Model(模型)、View(视图)和ViewModel(视图模型)。Model(模型):负责处理数据和业务逻辑。它可以是从网络获取的数据、数据库中的数据或其他数据源。Model层通常是独立于界面的,可以在多个界面之间共享。View(视图):负责展示数据和与用户进行交互。它可以是Activity、Fragment、View等。

招风的黑耳优快云 1459

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WPF--CommunityToolkit.Mvvm框架详解

WPF--CommunityToolkit.Mvvm框架详解

Blue 2673

SwiftUI-MVVM项目详解:如何用Combine框架打造高效GitHub API客户端

SwiftUI-MVVM是一个基于SwiftUI、MVVM架构和Combine框架构建的iOS示例项目,它展示了如何高效地与GitHub API交互。本指南将带你深入了解这个项目的核心架构、关键组件和实现原理,帮助你掌握现代iOS应用开发的最佳实践。 ## 📱 项目架构概览 该项目采用经典的MVVM(Model-View-ViewModel)架构,结合Combine框架实现响应式数据流。这种

gitblog_00408的博客 882

C# UI 框架与 MVVM 模式详解

【代码】C# UI 框架与 MVVM 模式详解。

qq_37372022的博客 323

[Vue框架]Vue之 MVVM 细节详解

原文地址:http://www.cnblogs.com/onepixel/p/6034307.html MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自动传递给 V

图解AI 8944

android mvvm 官方例子,详解Android的MVVM框架 - 数据绑定

本教程是跟着 Data Binding Guide学习过程中得出的一些实践经验,同时修改了官方教程的一些错误,每一个知识点都有对应的源码,争取做到实践与理论相结合。Data Binding 解决了 Android UI 编程中的一个痛点,官方原生支持 MVVM 模型可以让我们在不改变既有代码框架的前提下,非常容易地使用这些新特性。其实在此之前,已经有些第三方的框架可以支持 MVVM 模型,无耐由...

weixin_42594419的博客 998
上一篇: 计算机专业简历模版
下一篇: C++多线程编程lock_guard和unique_lock
CodeCheers
博客等级 码龄5年 154粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值