浅谈MVVM模式和MVP模式——Vue.js向
浅谈MVVM模式和MVP模式——Vue.js向
传统前端开发的MVP模式
MVP开发模式的理解过程
首先代码分为三层:
model层(数据层),
presenter层(控制层/业务逻辑相关)
view(视图层)MVP模式代码示例
M层在上图代码中不太明显,分析P层和V层是如何通信:
- 当视图发生改变,点击提交按钮后,控制器中的代码会执行。
- 控制器负责所有的逻辑,控制器可以去调模型层,比如发起ajax请求,只是此处代码并没有数据。
- 控制器处理完业务逻辑之后,控制器会通过DOM操作再去改变视图。
- 结合MVP模式图示,容易理解。
Presenter是最核心的层,它是视图层和模型层的中转站,但大量代码在操作DOM。
- MVP的缺陷:
- 大量的代码都在presenter层,model层相比下很边缘。
- presenter层中大量的代码都是在操作DOM。
当前流行的MVVP模式
图源自维基百科。MVVM的优点是有助于前端界面开发和后端逻辑的开发分离。其中VM视图模型是中介者,它负责从模型中转换数据对象,再呈现对象。从Vue.js的角度去看MVVM模式:
Vue框架设计同样有view层和model层,只是没有Presenter层,多了一层ViewModel。使用MVVM设计模式开发,我们不需要关注VM层,这是Vue.js内置的,只需要关注视图层和模型层。
- Vue.js代码示例
vue代码中,没有任何DOM操作,代码中都是在写数据和写HTML也就是model层和view层。vue就是VM层。当视图层或者数据层发生改变时,VM层都会自动映射到对方。因此使用MVVM框架,最核心的层是数据层。
MVP和MVVM的直接比较
MVP面向DOM开发,MVVM面向数据开发。
MVVM让代码量更少
浅谈MVVM模式和MVP模式——Vue.js向的更多相关文章
- [原创]浅谈在创业公司对MVP的理解
[原创]浅谈在创业公司对MVP的理解 目前自已所处的公司类似一个创业平台,我们内部会不断的去孵化不同方向的产品,产品经理经常谈到的一个词就是MVP,所以有必需要去了解下什么是MVP? 1 什么是MVP ...
- 浅谈Android架构之MVP,MVVM
概述 MVP(Model-View-Presenter)是传统MVC(Model-View-Controller)在Android开发上的一种变种.进化模式.主要用来隔离UI.UI逻辑和业务逻辑.数据 ...
- 浅谈JavaScript中的原型模式
在JavaScript中创建对象由很多种方式,如工厂模式.构造函数模式.原型模式等: <pre name="code" class="html">/ ...
- 浅谈cocos2dx(18) 中工厂模式
----我的生活.我的点点滴滴! ! cocos2d-x中也有工厂模式.何为工厂模式,顾名思义就是用来产生产品的,工厂就是用来创建其它类对象的类,我们把这个创建其它类对象的类叫做工厂类.而这些被创建的 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- 浅谈MVVM
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致. 唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewMod ...
- MVC模式和MVP模式的区别
MVC模式: 1. MVC的所有通信都是单向的. 2. view传送指令到controller(用户也可以直接将指令传到controller). 3. controller完成业务逻辑后要求model ...
- Android MVC模式和MVP模式的区别
MVC模式: 1. MVC的所有通信都是单向的. 2. view传送指令到controller(用户也可以直接将指令传到controller). 3. controller完成业务逻辑后要求model ...
- Vue.js-----轻量高效的MVVM框架(二、Vue.js的简单入门)
1.hello vue.js! (1)引入vue.js <script type="text/javascript" src="js/vue.js"> ...
随机推荐
- 桥接模式_NAT模式_仅主机模式_模型图.ziw
2017年1月12日, 星期四 桥接模式_NAT模式_仅主机模式_模型图 null
- Andrew File System
Andrew File System 2015-01-01 #system 突然感觉艺术细胞爆发啊,刚刚去Utown吃饭,一路上发现许多美丽的景色,拿手机一直拍,哈哈,元旦好心情~~不扯淡,还有两篇博 ...
- RBAC权限系统设计
序言 RBAC表结构 用户表 角色表 权限表 用户角色(关系)表 角色权限(关系)表 资料 https://blog.csdn.net/ShrMuscles/article/details/80532 ...
- eclipse运行Android项目出现“The connection to adb is down, and a severe error has occured. You must restart adb and Eclipse. ”
重启eclipse之后仍然出现同样错误,此时可以尝试一下方法: cmd打开命令窗口: 之后重启eclipse,基本可以解决问题!
- Django之组合搜索组件(二)--另附simple_tag的创建使用方法
这次的代码为Django之组合搜索组件(一)的改版,实现的结果和(一)相同,不同的是,这次运用simple_tag方式,使.html程序简化 所以现在就开始编程吧! 首先想使用simple_tag方法 ...
- Vue-Module
由于使用单一状态树,应用的所有状态会集中到一个比较大的对象.当应用变得非常复杂时,store 对象就有可能变得相当臃肿. 为了解决以上问题,Vuex 允许我们将 store 分割成模块(module) ...
- C++ 模版的优点和缺点
优点: 1. 灵活性, 可重用性和可扩展性; 2. 可以大大减少开发时间,模板可以把用同一个算法去适用于不同类型数据,在编译时确定具体的数据类型; 3. 模版模拟多态要比C++类继承实现多态效率要高, ...
- 用PHP去实现数据库查询结果缓存
有些时候我们希望减少对数据库的查询来提高程序的性能,因为这些数据不是经常变更的,而是会在很长一段时间内都不会变化,因此,我们每连接一次数据库,都会把相应的结果用文件的形式保存起来.比如对于一个商城来说 ...
- 关于HTML5服务器发送事件(SSE)
最近在看 W3School 上关于 HTML 5 的教程.在看到 HTML 5 服务器发送事件 ( SSE, server-sent event ) 时,没怎么弄明白示例代码是怎么回事,寻找其他教程, ...
- Oracle Spatial操作geometry方法
Oracle Spatial中SDO_GEOMETRY类型: CREATE TYPE SDO_GEOMETRY AS OBJECT( SDO_GTYPE NUMBER,--几何类型,如点线面 SDO_ ...