美文网首页
关于MVVM的一些粗浅理解

关于MVVM的一些粗浅理解

作者: 涛涛涛涛涛涛涛涛涛 | 来源:发表于2018-10-08 17:09 被阅读0次

直入主题吧,MVVM究竟是什么?

首先MVVM(Model-View-View Model)应该说是一种开发的架构,说到架构你一定听说过MVC,那么他们究竟有什么不同呢?

先放一张传统MVC的图(网上找的)

Model呈现数据,View呈现UI,Controller内进行各种数据处理、运算为Model和View进行数据交互 。

当使用MVC架构进行代码编写的时候,大家可能会发现,在一些复杂的界面,ViewController会有大量代码,显得特别臃肿,它既要处理数据,又要控制UI的展现,一个ViewControll写到上千行时,想找的一个特定的方法都有点困难。

那么使用MVVM架构会怎样呢?

再放一张图(自己画是不可能的了,一辈子都不会画的~)

这里引入了一个新的模块View Model,其实它的出现就是为了减轻Controller的臃肿和复杂程度,我们可以将数据在ViewModel中进行处理,并暴露出View可以直接使用的数据。

在我看来ViewModel和Model有一些相似之处,Model是根据后台返回的数据而创建的,那么ViewModel则是根据UI需要的数据而创建的。就是将原来写在Controller中的各种逻辑代码写到它身上,最终暴露出结果供View使用。

例如:

在MVC架构下我们需要在ViewController中写到

self.PriceLabel.text = [NSString stringWithFormat:@"%@ %.2f",self.model.Currency,self.model.UnitPrice *self.model.Quantity];

而在MVVM架构下,我们可以将各种逻辑运算写到ViewModel中

在ViewModel.h文件暴露View需要的数据

@property (nonatomic,strong) NSString * PriceLabel_Text;

在ViewModel.m文件中进行数据处理

self.PriceLabel_Text = [NSString stringWithFormat:@"%@ %.2f",self.model.Currency,self.model.UnitPrice *self.model.Quantity];

那么这时Controller只需要直接使用ViewModel暴露的数据即可

self.PriceLabel.text = self.ViewModel.PriceLabel_Text;

这样就降低了Controller的复杂度,将大量的逻辑代码迁移至ViewModel中,在复杂的界面中,这种架构的好处会更加明显。

同样的在调试时ViewController不再需要做更多的复杂操作,同时也可以在ViewModel中模拟各种数据在View中展现出来。

最后关于数据与控件绑定,在MVC中可以使用KVO直接在ViewController中绑定Model和控件,当Model的值发生改变,那么控件会立即刷新成新的值,但是MVVM中我们需要将Model与ViewModel绑定,而ViewModel与View中的控件绑定。即Model的值发生改变时,ViewModel会进行逻辑运算,计算出新的值。当ViewModel计算出新值时,View中对应控件会立即刷新显示新的值。如果需要反向从View去改变Model的值则需要更加复杂的设计,这样确实在APP运行时MVVM架构会占用更多的内存。

以上就是我对MVVM架构的一些粗浅理解,如果有理解错误的地方希望大家及时指正我,也希望各路大神进行补充,万分感谢~

相关文章

  • 关于MVVM的一些粗浅理解

    直入主题吧,MVVM究竟是什么? 首先MVVM(Model-View-View Model)应该说是一种开发的架构...

  • android的MVVM 框架模式的优缺点

    声明:本篇文字只是个人的理解,记录,由于水平有限理解粗浅 仅做参考MVVM:即Model,View,ViewMod...

  • 关于政德的粗浅理解

    今天下午在济宁政德学院听取了刘峰教授的讲座—《不忘初心使命,加强政德修养》,初次接受这类培训,难以理解透...

  • 关于promise的粗浅理解

    定义 在JavaScript的世界中,所有代码都是单线程执行的。 由于这个“缺陷”,导致JavaScript的所有...

  • MVVM结合ReactiveCocoa在项目实践中的理解和总结的

    关于MVC和MVVM在项目实践中的理解和总结的一些经验 首先来转载一些MVC和MVVM的一些概念,网上一大堆,就不...

  • 编程架构(iOS)

    MVCMVPMVVM可以看看关于mvvm和reactiveCocoa的介绍 很多人对MVVM有不同的理解,但是大致...

  • 关于股票的粗浅理解(一)

    今天手机推送新闻,说中央汇金公司出钱了。看来明天一早开盘会见红涨上去吧。 身边有为数不多的朋友玩股票,还真就被套里...

  • 关于股票的粗浅理解(二)

    今天早上一开盘,果然蹭蹭往上涨,听说涨了8%多。看来信心十足啊。 股市,瞬息万变,神鬼莫测。但是大方向不会变。大方...

  • IOS 关于 mvvm个人理解

    记录下自己对于mvvm的理解,由于网上一堆关于mvvm的定义不在赘述,只记录自己在项目使用的理解和使用方式 1:在...

  • 关于MVVM中的ViewModule的一些理解

    上个星期感觉好充实,星期三去参加了Google Developer Day,第一次见到谷歌的官方人员,第一次见到大...

网友评论

      本文标题:关于MVVM的一些粗浅理解

      本文链接:https://www.haomeiwen.com/subject/xxljaftx.html