MVC模式:

  M:Model(数据模型),用于存放数据
  V:View(视图),也就是用户界面
  C:Controller是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:
    Controller负责将Model的数据用View显示出来
    用户操作> 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 作出相应更新。这个一来一回的过程就是我们所熟知的双向绑定。

 

最新文章

  1. dubbo配置
  2. 文本标记器vi
  3. js--使用构造器函数来新建对象及操作
  4. Redis的Python客户端redis-py的初步使用
  5. Node.js之绝对选择
  6. [转]WPF/MVVM快速开始手册
  7. 【Beta阶段】团队源代码管理
  8. 【jQuery】关于选择器中的 :first 、 :first-child 、 :first-of-type
  9. PL/pgSQL学习笔记之六
  10. bzoj1858: [Scoi2010]序列操作
  11. EventBus 事件总线 案例
  12. ubuntu14.04下编译安装ambari-2.4.2.0
  13. PS 滤镜算法原理——曝光过度
  14. Python:time模块/random模块/os模块/sys模块
  15. Prometheus-配置解析
  16. php使用redis的几种常见方式和用法
  17. [Android]-图片JNI(C++\Java)高斯模糊的实现与比較
  18. Objective-C GCD深入理解
  19. eclipse git 创建新分支 合并分支 删除分支
  20. pygame系列_小球完全弹性碰撞游戏_源码下载

热门文章

  1. APP的三种开发模式
  2. 以iphone作为热点时ios程序中的UDP广播地址
  3. 解决SecureCRT中文版"数据库里没找到防火墙'无'"的错误提示
  4. IntelliJ IDEA配置Maven
  5. java web项目最简单的结构
  6. zabbix3.0 agent安装配置
  7. 设置Jexus开机启动
  8. pip包导出
  9. Mysql和mongo安装配置
  10. Delphi中DataSet和JSON的互转