神刀安全网

Mvvm 认识

MVVM设计模式的优点
1.双向绑定技术,当Model变化时,View-Model会自动更新,View也会自动变化。很好做到数据的一致性,不用担心,在模块的这一块数据是这个值,在另一块就是另一个值了。所以 MVVM模式有些时候又被称作:model-view-binder模式。
2.View的功能进一步的强化,具有控制的部分功能,若想无限增强它的功能,甚至控制器的全部功几乎都可以迁移到各个View上(不过这样不可取,那样View干了不属于它职责范围的事情)。View可以像控制器一样具有自己的View-Model.
3.由于控制器的功能大都移动到View上处理,大大的对控制器进行了瘦身。不用再为看到庞大的控制器逻辑而发愁了。
4.可以对View或ViewController的数据处理部分抽象出来一个函数处理model。这样它们专职页面布局和页面跳转,它们必然更一步的简化。
【长篇高能】ReactiveCocoa 和 MVVM 入门(http://www.cocoachina.com/ios/20150526/11930.html)就是MVVM设计模式头脑风暴提唱者。其实它没有那么神,它也有很多固有的缺点,而且有的优点其实也是缺点,并且不容易改进。
MVVM设计模式的缺点
第一点:数据绑定使得 Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。
第二点:一个大的模块中,model也会很大,虽然使用方便了也很容易保证了数据的一致性,当时长期持有,不释放内存,就造成了花费更多的内存。
第三点:数据双向绑定不利于代码重用。客户端开发最常用的重用是View,但是数据双向绑定技术,让你在一个View都绑定了一个model,不同模块的model都不同。那就不能简单重用View了。
被误解的MVC和被神化的MVVM(http://www.infoq.com/cn/articles/rethinking-mvc-mvvm/)这篇文章是MVVM彻头彻尾的反对者,好像该设计模式一文不值。我只能说他太偏激了,只顾着指责,没有看到他最显然的优点和改进。
MVVM设计模式的优缺点之我见及改进
MVVM更高级更先进表现在解放了控制器(Controller),就是轻量级控制器。这个批评者也没有否定。MVVM不影响代码重用,其实抽象出来的一个一个小View就是为了代码重用的。反对者所谓的把网络请求封装到类里也就是View-Model。
其实对它贬低最多的只剩下集优缺点于一身的双向绑定技术。那么他们也不治之症,也可以改进。
对于调试困难的问题,确实存在,可以通过日志系统来定位,对数据被修改的地方进行敏感的地方进行日志打印。不会你的软件没有日志系统吧?
对于影响内存问题,你可以通过划分模块时,把一个页面或两到三个页面划分为一个模块,那样应用的model也不大,内存开销很小。我大都把每个页面多划分一个模块,减少耦合度,软件开发的高内聚低耦合的设计思想大家都懂吧!若把一个项目的数据都整合到一个面面俱到的model, 那除非傻子才那么做,就是那样做了,那也不符合MVVM模式了。
对于数据双向绑定不利于代码重用确实是一个问题。基本上重用的代码model都不相同。你可以对这两个model抽象成一个组合model.也可以观察你这个View需要哪些必须的数据,把它当变成成员变量,让他不绑定model.若这个View在两个模块使用,并且发送请求,那么你可以给这个View抽象为一个新的View-Model.
若真像《被神化的MVVM》那篇文章说的那样改进MVC设计模式,那么它就不是 MVC了,它更像不采用ReactiveCocoa的 MVVM了。
【长篇高能】ReactiveCocoa 和 MVVM 入门这篇文章给我们影响最深刻的是ReactiveCocoa的一切皆信号。其实也就是封装了一层block,没有什么神秘的,不过使用起来确实方便,值得推荐,若你会使用原来的老方式也没有什么掉价,并不是你不是你不使用ReactiveCocoa就不是 MVVM.它说了半天完了半天文字动画也没有说明 MVVM的本质,它的本质其实就抽像出来http请求类,增强View的功能,让它像控制器一样发送请求和刷新UI,甚至跳转页面。但是它说出了MVC向MVVM进化的根本方向:对控制器瘦身,增强View的功能,数据双向绑定。但是最关键是只说了优点,没有说它的缺点。兼听则明,偏信者暗。
我相信MVVM比MVC设计模式更先进,值得推荐,ReactiveCocoa 有助于MVVM的使用,它的另一个优点,更有助于模块化。并非文章说为了实现一切皆信号的境界。
既然ReactiveCocoa能有现成的实现MVVM设计模式的方案,而且便于实现软件模块化。那么没有必要必要盲目的反对,可以欣然接受,但是还没有达到盲目非使用不的地步。使用该设计方案,就要用到pods,不然很麻烦,我没有试过替代方案。
我们应该跳出方法论的怪圈,致力那种方案能使我们的软件更容易理解,更容易模块化就用那种方案。使用ReactiveCocoa会引入它的框架,需要使用pods。你不会可能感觉到心理上抗拒采用该技术,一旦你引入了该框架,学会了该技术,它会一劳永远给你以后的开发带来很多方便

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Mvvm 认识

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址