热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端MVC框架Backbone1.1.0源码分析(一)

前言如何定义库与框架前端的辅助工具太多太多了,那么我们是如何定义库与框架?jQuery是目前用的最广的库了,但是整体来讲jQuery目的性很也明确针对“DOM操作”,当然自己

 

前言

如何定义库与框架

前端的辅助工具太多太多了,那么我们是如何定义库与框架?

  • jQuery是目前用的最广的库了,但是整体来讲jQuery目的性很也明确针对“DOM操作”,当然自己写一个原生态方法也能实现同样的DOM操作,换句话说,不管你用来还是不用,都不影响你整体的布局,或者是代码体系结构。
  • 框架则是一套完整的解决方案,针对是某一个领域的,比如EXT,dojo,那么很明显,你要用就需要按照它的规则执行,不管是编码风格还是结构,有一定的约束力

 


一个老话题,前端为什么要用MVC

  • 前端开发中呢,不可避免的都有在应用逻辑中加入显示数据的代码的情况,当项目规模愈发变大时,这种形式的代码变得越发的难以维护,因为任何在主干逻辑中的变更都可能影响到数据显示逻辑,反之亦然,当然不管什么模式最主要的还是分离职责
  • 可能在大多数后端开发者看来,整个前端就是一个View层罢了,还在在这个View层中划分模型,控制器等等,是不是很不屑?
  • 在几年前只做做网站的验证之类的功能的话我或许会说,是的那是我也不信,但是随着Web前端随着复杂度的增加,很多地方跟客户端已经没有本质区别了。
  • 如果是单纯的页面型的产品,确实不需要那么复杂,编程嘛复杂即是错,针对不同项目我们应该就要明确不同的方案,就拿近几年出现的Hybird App来说,这种应用软件类产品,这就太需有良好的结构组织了,深有感触的是我自己手上就是Hybird App这种项目,基本都是AMD+各种设计模式的组合

 


此MVC非比MVC

  • MVC,模型 - 视图 - 控制器这个没哈好说的,基本概念大家都知道,PHP的zend,yii很多都是基于MVC的架构,但是这种的架构其实是把整个前端都都作为一个view处理了
  • 所以如果单纯拿Smalltalk-80的MVC的概念去套用前端,也就不那么合适了

 


我们如何理解前端的MVC

前端架构出现的根本原因呢,前端被越来越重视,nodejs,混合应用类似phonegap这都是在侵占别的领域 - -,所以前端功能的增强、代码的膨胀,导致不得不做“前端的架构”这个事情了。

软件架构模式MVC(Model-View-Controller)

大概理解就是:Models用来处理数据,View将处理结果呈现给用户,Controller用来连接这两者。

所以整个流程:

  • 用户在View上进行操作——比如在文本框输入数值或是点击按钮
  • Controller处理这个动作
  • Controller通过Model对数据进行增删改查,将其传递到View
  • View将数据展示给用户

 

大多数的前端jser感受不到MVC的重要性,最大的问题还是跟传统的观念有差别,模型不够复杂,不存在控制器的概念

当然直接说前端MVC还是有点牵强的,模型不是真正的模型,在操作View的过程中一些辅助的模型,真正的Model是贯穿前后端的

归根结底,我也不需要太深入的去讨论各种不同,但是前端MVC框架的出现带来的是一整套工作流程变更,后端工程师也可以编写前端的模型代码,把它跟后端彻底打通,交互工程师处理UI跟模型的互动关系,UI工作人员可以专注、无障碍地处理HTML源码,把它们以界面模版的形式提供给交互工程师。这一整套协作机制能够大大提高B/S架构系统的开发效率,如果再有外围的管控平台,生产效率将真正踏进工业化的阶段。

 


backbone

backbone是什么?

Backbone.js 是一个在Javascript环境下的 模型-视图-控制器 (MVC) 框架。任何接触较大规模项目的开发人员一定会苦恼于各种琐碎的事件回调逻辑、以及金字塔般的代码。而且,在传统的Web应用程序代码中,不可避免的都有在应用逻辑中加入显示数据的代码的情况。当项目规模愈发变大时,这种形式的代码变得越发的难以维护,因为任何在主干逻辑中的变更都可能影响到数据显示逻辑,反之亦然。

Backbone就是要来解决这样的代码耦合的问题。它通过提供一个控制层-显示层的框架,以及模版(template)来分离各自逻辑。这样的MVC框架类似于传统意义上桌面程序以及服务器端程序的程序框架。

这里只提backbone,至于什么mvp,mvvc模式,Angular,Ember,CanJs,我也研究不是很深入,就不误人子弟了

模型、视图、集合和路由器是 Backbone 框架中的主要组件

在backbone框架中,我们看不到控制器这个东东,在0.5版本之前好像是叫控制器,后来改成路由器了

可见backbone虽然号称MVC,但是也非正统啊

总的理解

模型Models进行数据处理,创建验证销毁或者保存到服务器

合集Collections用来枚举

通过Views来进行事件处理及与现有的Application通过RESTful JSON接口进行交互

backbone基本概念很容易理解,但是它并不会告诉你如何去架构一个应用,而仅仅只是在代码的逻辑组织上提供一种方案

所以正真把backbone用好,个人感觉难度还是比其余的一些框架要大很多

而且还有个最大的问题,结构冗余,Backbone要求你写很多样板代码,而这种代码其实很多时候是完全没必要的

好处自然就是灵活,社区大,插件多了

 


官方todos

http://backbonejs.org/examples/todos/index.html

这是个很经典的案例

先看todos需要实现的功能

1 添加任务

2 修改任务

3 删除任务

4 任务统计

这个是完全用backbone实现的,其实整体一看逻辑还是很清晰的

Model,Collection,View,View

 


backbone的实现

先来分解下todos的操作,通过用户输入信息,然后显示信息到页面,然后还可以删除修改

视图View寓意就很明确,展现内容,内容从哪里来的,模型里面取的,模型为什么会有数据,因为用户输入的,怎么知道用户输入,因为监听了

我们看看backbone的做法

首先是创建一个全局的Todo的collection对象

var Todos = new TodoList;

 

在视图层对用户行为的监控,从而对模型合集进行curd的一系列操作

Backbone.View.extend = {
events: {
"keypress #new-todo": "createOnEnter",
"click #clear-completed": "clearCompleted",
"click #toggle-all": "toggleAllComplete"
},
createOnEnter:
function (e) {
if (e.keyCode != 13) return;
if (!this.input.val()) return;

Todos.create({title:
this.input.val()});
this.input.val('');
}
}

如果按照MVC的最原始定义,view永远不会知道用户输入,比如鼠标操作和按键,所以这里很明显就违规了~~

所以在web开发中,我们是无法1:1的对应入座的,用户的输入必须通过监听窗口、文档和元素上的事件来获得

这里有个很MVC架构很不明确的点,控制器在哪里?Controller应该是View操作Model的中介?

所以backbone其实只能是看作为数据和逻辑相互分离的一种方案,减少代码开发过程中的数据和逻辑混乱

好吧个人见解~ 不喜勿喷~

 

附上:

 Developing Backbone.js Applications


推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
author-avatar
董可芳妍_731
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有