MVC模式:
-
M:
Model
(数据模型),用于存放数据 -
V:
View
(视图),也就是用户界面 -
C:
Controlle
r 是Model
和View
的协调者,Controller
负责将Model
的数据用View
显示出来三者之间的关系:
Controller
可以直接与Model
和View
进行通信,而View
不能与Controller
直接通信。当有数据更新时,Model 也要与 Controller 进行通信,这个时候就要用 Notification 和 KVO,这个方式就像发广播一样,Model 发信号,Controller 设置接收监听信号,当有数据更新是就发信号给Controller,Model 和 View 不能直接通信,这样违背 MVC 设计原则。
View
与Controller
通信需要利用代理协议的方式,Controller
可以直接根据Model
决定View
的展示。View
如果接受响应事件则通过delegate
,target-action
,block
等方式告诉Controller
的状态变化。Controller
进行业务的处理,然后再控制View
的展示。MVC:
用户操作 >View
(负责接受用户的输入操作) >Controller
(业务逻辑处理)>Model
(数据持久化)>View
(将结果通过View反馈给用户)
缺点:1、所有业务逻辑都在Controller里操作,逻辑复杂且不利于维护
2、大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验
3、当 Model 频繁发生变化,需要主动更新到View ;当用户的操作导致Model发生变化,同样需要将变化的数据同步到Model中, 这样的工作不仅繁琐,而且很难维护复杂多变的数据状态。由于MVC模式的缺陷,MVC 的变种模式衍生出 MVVM模式
MVVM模式:
核心是提供对View 和 ViewModel 的 双向数据绑定,View和Model之间并没有直接的联系,而是通过ViewModel进行交互,View的变动,自动反映在ViewModel上,反之亦然,这样就保证视图和数据的一致性。
- M:Movel(数据模型)
- V:View
- VM:ViewModel 是一个同步View 和 Model的对象
三者之间的关系:
View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互。
ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。
VM双向绑定:
在 MVVM 框架中,View(视图) 和 Model(数据) 是不可以直接通讯的,在它们之间存在着 ViewModel 这个中间介充当着观察者的角色。当用户操作 View(视图),ViewModel 感知到变化,然后通知 Model 发生相应改变;反之当 Model(数据) 发生改变,ViewModel 也能感知到变化,使 View 作出相应更新。这个一来一回的过程就是我们所熟知的双向绑定。