怎样理解 MVVM ( Model-View-ViewModel ) ?
MVVM 的 产生 / 实现 / 发展 可以写一篇很长的博客了, 这里仅写一下个人对 MVVM的一些肤浅的认识.
1. 在 没有 MVVM 之前, 前端可以说是 jQuery一把梭 , jQuery 解决的是前端在写页面 交互/ 功能 时需要 频繁操作 dom 这一痛点, 在 简化 dom 操作 这一点上, 没有哪个库比 jQuery 更出色. 而且还能解决大部分 浏览器兼容性问题 , 用起来别提有多爽了.
2. 然而, 随着 网速 越来越快 / 手机性能 越来越好, 大家纷纷觉得可以在 网页 上多做文章, 而且 HTML5 和 ES6 的出现为开发者在 网页 上做 应用 提供了极大的便利, 此时人们发现, 原来非常好用的 jQuery 慢慢变得不合适了, 因为它没有解决 因为频繁调用 DOM 而产生的 性能问题 , 也没有简化开发者在处理用户与页面交互时所需的业务逻辑.
3. 为了解决上面的问题, MVVM 架构方式应运而生 , Model-View-ViewModel 的这个思想可能是受到了服务端的 MVC 架构 ( Model-View-Controler ) 的启发, 不过 MVVM 针对 前端的具体痛点, 强化了 Controler, 也就是: ViewModel, 我们可以认为 MVVM 里面最为核心的就是 ViewModel. 它将 View 和 Model 分离, 也就实现了 逻辑 与 展示 的分离, 使得我们可以不用像之前一样需要频繁地操作 DOM, 也不需要手动地去更新 数据( model ) 和 页面( view ). 这一切, ViewModel 都已经为我们做好了, 我们唯二需要做的就是: 1. 写页面. 2. 写逻辑. 至于怎样将逻辑和页面关联起来实现交互, ViewModel 表示: 这事儿你就不用管了, 让我来~.

4. 总结起来, MVVM 可以看成是 MVC 架构针对前端主要开发场景所衍生出来的 子集, 它对 视图 和 模型 进行了 严格分离, 强化了 Controler, 从而解决了在开发 现代Web应用 时所遇到的痛点.
怎样理解 MVVM ( Model-View-ViewModel ) ?的更多相关文章
- 【前端知识体系-JS相关】深入理解MVVM和VUE
1. v-bind和v-model的区别? v-bind用来绑定数据和属性以及表达式,缩写为':' v-model使用在表单中,实现双向数据绑定的,在表单元素外使用不起作用 2. Vue 中三要素的是 ...
- MVVM模式中ViewModel和View、Model有什么区别
Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model. View:也很简单,就是展现出来的用户界面. 基本上,绝大多数软件所做的工作无非就是从数据 ...
- 理解MVVM在react、vue中的使用
理解MVVM在react.vue中的使用 一:什么是MVC.为什么不用MVC 1:MVC的含义: M(modal):是应用程序中处理数据逻辑的部分. V (view) :是应用程序中数据显示的部分. ...
- 如何理解MVVM
说一下对MVVM的理解 MVC Model,View,Controller. View是视图,界面,有输入框,有按钮,有列表等. Model是数据源,比如todolist里面等title,list ...
- 理解MVVM模式
1.WPF的核心是数据绑定. 2.考虑这样一个场景:界面上有一个TextBox显示Person的年龄,一个Button,点击一次Button,年龄加1. 3.做一个View,上面有TextBox和Bu ...
- MVC(Model View Controller)框架
MVC框架 同义词 MVC一般指MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一 ...
- 深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)
在DRP中终于接触到了MVC,感触是确实这样的架构系统灵活性不少,现在感触最深的就是使用tomcat作为服务器发布比IIS好多了,起码发布很简单,使用起来方便. 首先来简单的学习一下MVC的基础知识, ...
- qt model/view/delegate
Qt Model/View理解(一)---构造model https://blog.csdn.net/weixin_42303052/article/details/89233887 Qt Model ...
- 第15.27节 PyQt(Python+Qt)入门学习:Model/View架构中的便利类QTreeWidget详解
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 树部件(Tree Widget)是Qt Designer中 Item Widgets(It ...
- 第二十二章、 Model/View便利类树型部件QTreeWidget
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 树部件(Tree Widget)是Qt Designer中 Item Widgets(It ...
随机推荐
- 【软件工程】Beta冲刺(1/5)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 tomcat的学习与实现 服务器后端部署,API接口的beta版实现 后端代码 ...
- 3299 Humidex
Humidex Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 23219 Accepted: 8264 Descript ...
- Nginx作为静态资源web服务-跨站访问
一.跨域访问 1.什么是跨域? 参看我的另一篇博客(https://www.cnblogs.com/chrdai/p/11280895.html) 2.为什么浏览器禁止跨域访问? 不安全,容易出现CS ...
- 如何解决Sublime text中文乱码问题
Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦.不过Sublime Package Control所以供的插件可以让Subli ...
- Python - 默认参数传参陷阱
def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) print(list1) # [10] list2 ...
- smarty 第一条数据判断
<div class="shangpin_rightdiv2"> <p>颜色</p> <ul id="toggle"& ...
- c语言数组在作为参数传递时注意事项
1.不能在[]给定大小 2.不要在被调用函数里使用sizeof(a)/sizeof(a[0])形式传递数组大小,直接给出数组长度,或者在 主调函数中使用sizeof(a)/sizeof(a[0])传递 ...
- Spring-Kafka —— 消费重试机制实现
消息处理问题 在从Kafka主题接收消息之后立即处理消息的消费者的实现非常简单.不幸的是,现实要复杂得多,并且由于各种原因,消息处理可能会失败.其中一些原因是永久性问题,例如数据库约束失败或消息格式无 ...
- java数据机构之自定义栈
一.栈的特点 1.线性数据结构 2.后进先出 二.使用数组来实现栈 //使用数组来实现栈 public class MyArrayStack<E> { //保存数据 private Obj ...
- go http server 编程
第一种:最简单的 package main import ( "fmt" "log" "net/http" ) func myHandler ...