要了解mvvm,首先要了解mvc和mvp,我们也先简单说一下mvc和mvp。
MVC:
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
结构图如下:
MVP:
MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
以下是个人看法,如有错误,请指正。
MVVM:
一、MVVM是基于组件开始、数据驱动的
说到MVC或MVP,可能大家都是熟悉的,因为MVC或MVP都是基于面向对象的设计模式;而MVVM是基于组件,数据驱动的设计模式。
正是这一区别,造成大家对于MVVM学习起来比较费力,因为一开始姿势就不正确。
大家了解到这一原因之后,再去了解一下组件式开发和数据驱动,学习起来会舒服很多。
二、MVVM的优点
1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。
三、MVVM配合一个绑定机制效果最好
大家应该注意到了第一点的组件式开发和数据驱动以及第二点中的所有优点。
没错,就是用过CocosCreator或Unity引擎的同学写的游戏基于都是基于MVVM设计模式来开发的。
可能大家还没意识到这一点,所以现在大家用以上引擎工作的同学,更应该学习MVVM,以后的代码以MVVM模式思维来开发,代码的健壮性、可读性、可复用性会更加好。
最后,还有一点,MVVM分为M、V、VM。
大家用CCC或Unity的时候,VM就是大家写的脚本逻辑,M就是项目中的数据。
然后V呢?其实V就是我们看到的可视化界面或者说是Node,引擎已经帮我们做好V了。
谢谢SparklingDog指正。