前端MV*

前端开发时,常接触到MVC,MVP和MVVM这些名词,它们都是软件架构设计的一种方式,最初都是为桌面应用软件的设计而实现的,后来有了应用在WEB上的变体,《到底什么是MVC?》这篇文章有详细的介绍。那他们在WEB前端如何应用呢?

MVC

先看下MVC(Model-View-Controller)的概念:

Model:定义数据模型,实现业务逻辑,当数据发生变化时,通过事件通知View来更新。
View:界面视图,能从Model获取数据。
Controller:响应用户的界面交互操,能调用Model执行业务逻辑。

真正意义上的MVC,不适合在前端实现,因为用户通过浏览器来操作界面,都是先由View来响应。Backbone.js常被称为是前端的MVC框架,实际并不是,用户的与界面的交互还是先到View,它的Controller只是做为路由器。

MVP

再看下MVP(Model-View-Presenter)的概念,MVP可分为Supervising Controller和Passive View模式:

  • Supervising Controller模式

Model:定义数据模型,实现业务逻辑,数据发生变化时,通过事件通知View来更新视图。
View:界面视图,响应用户的界面交互操作请求,然后将请求转给Presenter执行,View还能直接从Model获取数据。
Presenter:接受View的请求,然后可以做一些简单的控制或数据验证等处理,响应给View,或者调用Model执行业务逻辑。

  • Passive View模式

Model:定义数据模型,实现业务逻辑,数据发生变化时,通过事件通知Presenter,Presenter再来操作View,更新界面视图。
View:界面视图,响应用户的界面交互操作请求,然后将请求转给Presenter执行。
Presenter:接受View的请求,可以是做一些简单的控制或数据验证等处理或者是从Model获取数据,再响应给View,也可以是调用Model执行业务逻。

这两种模式在WEB前端实现,就是把页面的DOM事件逻辑提取出来,放到Presenter里,同时Presenter还充当View和Model通信的中介,实际应用中,很少严格按MVP方式来设计。

MVVM

不管是MVC还是MVP,都只是一种设计上的思路,目标是实现界面视图和业务逻辑解耦分离,在WEB前端,很多框架是用的这种方式来实现的,MVVM(Model-View-ViewModel)的概念:

Model:定义数据模型,实现业务逻辑,当Model数据发生变化时,通过事件通知ViewModel数据更新。
View:界面视图,响应用户的界面交互操作请求,然后将请求转给ViewModel执行。
ViewModel:能接受View的请求,操作View以及调用Model执行业务逻辑,ViewModel的数据跟View关联,当ViewModel数据变化后,自动更新对应的View的界面视图。

现在流行的MVVM开发框架,例如Vue,自身支持下面三个特性,这样能为开发节省大量的工作

  • Model数据变化后通知对应的ViewModel数据更新
  • 用户的操作交互响应通过View转发给ViewModel(DOM节点自动绑定事件)
  • ViewModel数据变化后通知对应的View更新界面视图(界面自动绑定数据)


参考文章:

时间: 2024-10-10 01:58:52

前端MV*的相关文章

前端mv框架下(目前写的是vue),对组件抽象的思考

前沿: 抽象是门大学问.前端mv框架中,以组件化的概念为主.经常会考虑抽象到组件级别,进行复用.合理的抽象,能提高效率,减少业务逻辑视图的耦合程度.不合理的抽象,则会增加代码的复杂程度. 遇到的问题 合理的抽象是很难的,需要不断的思考,才能做到最合适的抽象.在b+项目中,遇到了一些问题. 1.有些组件,ui和逻辑都可复用.ui抽象了,对应逻辑没抽.这样在复用这个组件的适合,逻辑部分的代码没有复用到,得另外复制粘贴一份. 2.有些组件,ui可复用,逻辑不可复用.抽象成一个组件,ui是实现了复用,但

从Vue.js窥探前端行业

近年来前端开发趋势 1.旧浏览器逐渐淘汰,移动端需求增加: 旧浏览器主要指的是IE6-IE8,它是不支持ES5特性的:IE9+.chrome.sarafi.firefox对ES5是完全支持的,移动端大部分浏览器是基于webkit内核,所以ES5在移动端也是全面支持的,因此vue可以在移动端以及现代浏览器中大显身手. 2.前端交互越来越多,功能越来越复杂: 现在的前端可谓是包罗万象,比如高大上的技术库和框架.酷炫的运营活动页面.H5小游戏,当然前端技术的应用在更多具有商业价值的应用上,比如下图.

2016年1月-前端开发月刊

可以从这关注实时动态,也可以fork之后push:https://github.com/jsfront/month 可以从这查看以往:http://www.kancloud.cn/jsfront/month/82796 1. Javascript 2. 移动Javascript开发 3. Html5 4. CSS 5. Angular 6. React, Webpack 7. Vue 8. jQuery 9. 看书学习 10. Git,Github 11. 创业 | 职业 | 管理 | 产品 1

《现代前端技术解析》第一章读书笔记(未完成)

今天是2017年6月26日,星期一,开始从第一章看起.第一章主要讲的是前端技术的发展概况以及一些必须掌握的浏览器基础知识与常用开发技术. 页面内容多而复杂,为了保证开发效率,我们可以借助符合特定场景的前端框架来提高开发效率,例如使用JQuery丶MVVM等开发框架,对常用的 HTML DOM 操作进行高效封装,大大简化开发工作量,提高效率. 前端项目代码越来越多丶结构越来越复杂,我们必须考虑用模块化和组件化的思路来管理.所谓的模块化和组件化是指采用代码管理中分治的思想,将复杂的代码结构拆分成多个

基于AngularJS的企业软件前端架构[转载]

这篇是我参加QCon北京2014的演讲内容: 提纲: 企业应用在软件行业中占有很大的比重,而这类软件多数现在也都采用B/S的模式开发,在这个日新月异的时代,它们的前端开发技术找到了什么改进点呢? B/S企业软件前端开发模式大体上与桌面软件类似,都是偏重量级的,在前端可能会有较多的业务逻辑,这些业务逻辑如何被合理模块化,与界面分离,以便测试,成为这个领域的一个重要挑战.另一方面,由于企业应用的界面相对规整,偏重的是数据存取,没有太多花哨的东西,所以常见的界面控件也是可枚举的,如何让开发界面的工作能

web前端常见面试题汇总

一.理论知识 1.1.讲讲输入完网址按下回车,到看到网页这个过程中发生了什么 a. 域名解析 b. 发起TCP的3次握手 c. 建立TCP连接后发起http请求 d. 服务器端响应http请求,浏览器得到html代码 e. 浏览器解析html代码,并请求html代码中的资源 f. 浏览器对页面进行渲染呈现给用户 参考<一次完整的HTTP事务是怎样一个过程> 1.2.谈谈你对前端性能优化的理解 a. 请求数量:合并脚本和样式表,CSS Sprites,拆分初始化负载,划分主域 b. 请求带宽:开

Web 前端构架师

Web 前端构架师一.要求1.统招本科以上学历2.工作经验3-5年前端研发经验3.精通各种Web前端技术,熟悉面向对象开发,对前端MV*框架有深刻理解,React必须掌握:4.有前端架构设计.性能优化.组件化和模块化方面的实战经验,有系统重构的能力:5.熟悉前端工程化工具,如Gulp/Webpack/ROllup.React二线互联网高潜力,目前可以没达到构架级别.二.主要职责1.参与移动 Web 业务技术选型与开发工作,孵化行业前沿新产品.新应用:2.参与基础库.开发框架.支撑平台架构设计与开

Backbone源码解读(一)事件模块

Backbone源码浅读: 前言: Backbone是早起的js前端MV*框架之一,是一个依赖于underscore和jquery的轻量级框架,虽然underscore中基于字符串拼接的模板引擎相比如今基于dom元素双向绑定的模板引擎已显得落伍,但backbone作为引领前端mv*开发模式的先驱之一,依然是麻雀虽小却设计精妙,了解其设计与结构对于想一探mv*框架的初学者来说仍会获益匪浅. Backbone结构: Backbone分为几个部分:其中最核心的是Event事件模块,提供了实现事件与观察

Angular从0到1:function(上)

1.前言 Angular作为最流行的前端MV*框架,在WEB开发中占据了重要的地位.接下来,我们就一步一步从官方api结合实践过程,来学习一下这个强大的框架吧. Note:每个function描述标题之后的★标明了该function的重要程度(1~5星). 2.function(上) Angular封装了一系列公共方法,帮助我们更简单的使用JS.这些就是Angular的function. 2.1.angular.bind(★) angular.bind类似于Function.prototype.