MVVM框架详解

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++的选手,不管是前端还是客户端,还是后端,这个框架都涉及的有,全球有很多用户特别大的软件都使用的是这个框架,要多去学习框架,提升自己的项目代码能力,如果觉得我的文章对你有帮,请点赞收藏加关注,谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值