MVC
MVC即模型(Model)、视图(View)、控制器(Controller)
MVC允许在不改变视图的情况下改变视图对用户输入的响应方式,用户对View的操作交给了Controller处理,在Controller中响应View的事件调用Model的接口对数据进行操作,一旦Model发生变化便通知相关视图进行更新。Controller可以直接操作View,可以直接向Model请求数据,而Model与View相互之间不能通信。
其中:
1.Modal和View永远不能相互通信,只能通过Controller传递。
2.Controller可以直接与Modal对话(读写调用Modal),Modal通过Notification和KVO机制与Controller间接通信。
3.Controller可以直接与View对话,通过outlet直接操作View,outlet直接对应到View中的控件,View通过action向Controller报告事件的发生(如用户Touch)。Controller是View的代理,以同步View和Controller。
如果前端没有框架,只使用原生的html+js,MVC模式可以这样理解。将html看成view;js看成controller,负责处理用户与应用的交互,响应对view的操作(对事件的监听),调用Model对数据进行操作,完成model与view的同步(根据model的改变,通过选择器对view进行操作);将js的ajax当做Model,也就是数据层,通过ajax从服务器获取数据
MVVM:模型(Model) 、视图(View)、视图模型(ViewModel)
MVVM是一个MVC的增强版,正式连接了视图和控制器,并将表示逻辑从Controller移出放到一个新的对象里,即ViewModel,它实现了View和Model的自动同步,即当Model的属性改变时,我们不用再自己手动操作Dom元素来改变View的显示,而是改变属性后该属性对应的View层显示会自动改变。
在Vue中,其HTML部分相当于View层,data相当于Model层,而ViewModel层的核心是Vue中的双向数据绑定,即Model变化时View可以实时更新,View变化也能让Model发生变化。
整体看来,MVVM比MVC精简的多,不仅简化了业务与界面的依赖,还解决了数据频繁更新的问题,不用再用选择器操作DOM元素。因为在MVVM中,View不知道Model的存在,Model和View Model也观察不到View,这种低耦合模式提高代码的可复用性。