首页 > 其他分享 >了解一下MVVM的优点有哪些?你知道吗?

了解一下MVVM的优点有哪些?你知道吗?

时间:2022-11-06 16:38:06浏览次数:45  
标签:MVVM 哪些 数据源 优点 Model View model 页面

(MVVM的优点和缺点)

什么是MVVM?

MVVM( Model-View-ViewModel子控件的事件驱动模型),也就是轻量级的控制器架构。它本质上就是MVC的改进版。MVVM 就是将其中的View 的状态和行为抽象化,将视图 UI 和业务逻辑分开。

Model就是Entity,定义数据; View实现视图 UI; ViewModel负责请求发送及业务逻辑; UIViewController只负责生成数据(Model),View(视图 UI), ViewModel(请求发送及业务逻辑)三者的对象与协调他们完成具体的页面。


MVVM( Model View-Model Controller View)就是MVC设计模式的更先进进化,符合它进化的方向。每个人对MVVM了解不同和使用技术不同,最终实现的MVVM架构也不同。

数据源被强化,不单只是请求过来的数据还包括,数据在本页面应该处于的状态(例如:根据请求,支付页面是企业支付,不需要显示第三方支付选择框,model增加了这样的状态。当然这样的状态可以改变,用户重新选择了支付方式,选择个人支付,该状态要根据用户的行为而改变。),数据源对象在本页面或本模块中共享,一旦一个地方改变,本页面或模块中的所有数据源的内容都改变,保证了数据的一致性。它的全局共享性是它的一大特色。


一个页面可以有一个View-Model,也可以有多个View-Model,这个可以根据页面的复杂度和View(调用View-Model的View)是否在其它页面重用。若有View调用请求对象发送请求并且被其它页面重用该View,那么该View不能共享数据源。View-Model一般持有本页面或本模块的共享数据源。


控制器专注于自己的核心功能:页面的跳转,跨本页面多个视图的操作,数据源数据的初始化,从上一个页面接收数据转化为本页面的数据源(有的页面不发送请求只是显示数据,有的页面需要上也个页面接收关键字段(如“订单号)作为本页面请求的参数),子视图页面的创建和布局,子视图页面的block函数,状态栏,导航栏,页面跳转方式(有的页面需要跳转后销毁本页面—地图页面);


View增强了两大功能:持有全局数据源,根据数据源进行显示和布局;可以直接调用请求对象发送请求,来刷新数据或页面跳转。可以看到View已经具有部分控制器的功能(调用View-Model发送http请求,刷新页面),并且View根据抽象的需要可以在不同页面或模块间共享使用。


MVVM一般包含页面(或模块)总文件夹,

  • Entity文件夹(model对象或模块内的编译宏),
  • View文件夹(视图文件,该文件夹下可能包含子ViewModel文件夹),
  • 图片库(Assets.xcassets),
  • ViewController文件夹(控制器对象),
  • ViewModel文件夹(http请求对象)。 除了这个5个基本文件夹外还可能包含序列化model的文件夹。

MVVM设计模式的优点

序号 优点 缺点
1 双向绑定技术,当Model变化时,View-Model会自动更新,View也会自动变化。 数据绑定使得 Bug 很难被调试,数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。
2 View的功能进一步的强化,View可以像控制器一样具有自己的View-Model。 一个大的模块中,model也会很大,虽然使用方便了也很容易保证了数据的一致性,当长期持有,不释放内存,就造成了花费更多的内存。
3 可以对View或ViewController的数据处理部分抽象出来一个函数处理model。这样它们专职页面布局和页面跳转,它们必然更一步的简化。 数据双向绑定不利于代码重用。客户端开发最常用的重用是View,但是数据双向绑定技术,让你在一个View都绑定了一个model,不同模块的model都不同。那就不能简单重用View了。

MVVM设计模式的优缺点之我见及改进

MVVM更高级更先进表现在解放了控制器(Controller),就是轻量级控制器。这个批评者也没有否定。MVVM不影响代码重用,其实抽象出来的一个一个小View就是为了代码重用的。反对者所谓的把网络请求封装到类里也就是View-Model。 其实对它贬低最多的只剩下集优缺点于一身的双向绑定技术。那么他们也不治之症,也可以改进。 对于调试困难的问题,确实存在,可以通过日志系统来定位,对数据被修改的地方进行敏感的地方进行日志打印。不会你的软件没有日志系统吧? 对于影响内存问题,你可以通过划分模块时,把一个页面或两到三个页面划分为一个模块,那样应用的model也不大,内存开销很小。我大都把每个页面多划分一个模块,减少耦合度,软件开发的高内聚低耦合的设计思想大家都懂吧!若把一个项目的数据都整合到一个面面俱到的model, 那除非傻子才那么做,就是那样做了,那也不符合MVVM模式了。 对于数据双向绑定不利于代码重用确实是一个问题。基本上重用的代码model都不相同。你可以对这两个model抽象成一个组合model.也可以观察你这个View需要哪些必须的数据,把它当变成成员变量,让他不绑定model.若这个View在两个模块使用,并且发送请求,那么你可以给这个View抽象为一个新的View-Model.

标签:MVVM,哪些,数据源,优点,Model,View,model,页面
From: https://blog.51cto.com/u_15312559/5827302

相关文章

  • String常用方法有哪些
    一、构造器实质是给底层的char数组value赋值Strings1=newString();Strings2=newString(“abc”);Strings3=newString(newchar[]{‘a',‘b',‘c'});二......
  • Python主要的应用领域有哪些?
    作为一个实用主义的学习者,最关心的问题一定是“我为什么要选择学Python,学会之后我可以用来做什么?”。在上篇《为什么选择Python入门》文章中,我们已经明白了为什么选择学......
  • 当前被频频提及的企业数字化转型是什么?有哪些好处?
    当前被频频提及的企业数字化转型就是要构建“业务数字化、数字资产化、资产服务化、服务业务化”闭环的现代化企业,通过数字化技术能力反哺业务,所以它不是做信息化,而是业务......
  • 如何确定 this 指向?改变 this 指向的方式有哪些?
    this指向:1.全局上下文(函数外)无论是否为严格模式,均指向全局对象。注意:严格模式下全局对象为undifined2.函数上下文(函数内)默认的,指向函数的调用对象,且是最直接的调......
  • 低代码有哪些典型应用场景?
    低代码的应用场景取决于低代码平台的自身的架构体系与功能,目前大多数低代码平台还是以B端为主,即提供浏览器模式的方式提供简单的基于模块预定制、存储过程预定制之类预先......
  • 电子产品安全认证有哪些?​
    ​CCC认证—中国强制认证中国强制性产品认证于2002年5月1日起实施,认证标志的名称为“中国强制认证”(英文ChinaCompulsoryCertification的缩写“CCC”)。对列入国家质量......
  • 微服务分布式开源的优点体现在哪?
    随着业务量的扩大以及大数据的发展趋势,如果还是一如既往地采用单体应用的话,明显已经不能满足当前的需求了。毕竟单体应用会出现可维护性差、架构扩展性差、部署不灵活等缺......
  • linux有哪些文件类型
    七种文件类型在Linux中一切都是文件,但文件都得有类型。那如何查看文件是什么类型了?在Linux常见的文件类型有7种,分别如下所示:文件属性文件类型-常规文件,即file......
  • 云服务器的优点有哪些
    1、多地域性覆盖云服务器的所在地域性广,丰富的地域性为客户所拥有的业务保驾护航,三大地域覆盖全国内的业务需求。对于境外的也满足国外的需求。2、稳定可靠基于成熟的虚......
  • 自动化软件测试知识分享,上海权威软件检测公司有哪些?
    一、什么是自动化测试?自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一......