MVVM

作者: 哈布福禄克 | 来源:发表于2019-09-26 18:15 被阅读0次

首先解释下MVVM

    一种可以很好地解决Massive View Controller问题的办法就是将Controller 中的数据解析部分拿出来,放置到一个专门的地方,而这个地方就是ViewModel 。它促进了UI代码与数据解析分离

    在MVVM中,View和View Controller是联系在一起,可以把它们视为一个组件,View和View Controller都不能直接引用Model,而是通过引用视图模型(ViewModel),ViewModel是存放View Controller所需要数据的地方(View Controller敢要,ViewModel就敢给),使用MVVM会轻微的增加代码量,但总体上减少了代码的复杂性、耦合性。

MVVM的优缺点

(1) MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点:

1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。

3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码。

4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

(2) MVVM模式的缺点:

1.数据绑定使得Bug很难被调试。如果界面发生错误,有可能是View的代码有问题,也有可能是Model的代码有问题。数据绑定使得一个位置的Bug被快速传递到别的位置,要想定位原始出问题的地方,就变得不那么容易了。

2.对于大型项目,数据绑定和数据转化需要花费更多的内存(成本)。主要在于:数组内容的转化成本较高:数组里面每项都要转化成Item对象,如果Item对象中还有类似数组,就很头疼。转化之后的数据在大部分情况是不能直接被展示的,为了能够被展示,还需二次转化。只有在API返回的数据高度标准化时,这些对象原型(Item)的可复用程度才高,否则容易出现类型膨大,提高维护成本。

3.调试时通过对象原型查看数据内容,不如直接通过NSDictionary或者NSArray这样直观。

4.同一API的数据被不同View展示时,难以控制数据转化的代码,它们有可能会散落在任何需要的地方。

MVVM模式的其他内容

1.使用MVVM来开发控件。由于控件在大部分情况下不涉及到数据的持久化,所以如果将M纯粹理解为DomainModel的话,使用MVVM模式来进行自定义控件开发,实际上可以省略掉M,变成了VVM。

2.View可以引用ViewModel,但反过来不行(即:不要在ViewModel中引入#import UIKit.h,任何视图本身的引用都不能放在ViewModel中),ViewModel可以引用Model,但反过来不行。

3.MVVM可以兼容当前你使用的MVC架构,也可以增加你开发的应用的可测试性;MVVM配合一个绑定机制效果最好(eg:ReactiveCocoa)。

4.ViewController尽量不要涉及业务逻辑,让ViewModel去做业务逻辑;ViewController 只是一个“中间人”,接收View的事件、调用ViewModel的方法、响应ViewModel的变化;ViewModel 绝不能包含视图View(UIKit.h),否则就跟View产生耦合,不方便复用和测试。

5.ViewModel之间可以有依赖;ViewModel要避免过于臃肿冗余,否则讲重蹈Controller的覆辙,变得难以维护。

相关文章

网友评论

      本文标题:MVVM

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