前言
当空手创建一个Web应用时, 我们会自然而然的想到引入DOM操作库(比如jQuery)和一些实用的插件。这中做法的问题在于,不用多久就会因应用里 一大堆嵌套的jQuery回调和不在结构中实际存在的DOM元素而迷失。
简而言之, 我们被嵌套式的代码所束缚。幸运的是有现代的Javascript框架可以帮助我们引入项目的结构和组织方式, 该进成为在长时间运行的情况下也非常容易维护。
什么是MVC?
这些现代的框架给开发者提供一种简单的方式,MVC(Model-View-Controller)模式的变种,来组织他们的代码。MVC把我们在应用中关心的问题分隔成三部分:
- Models描述了特定域信息和应用中的数据。可以认为是一
类
你可以模拟的数据 — 比如一个用户、照片或者Todo笔记。Models 应该要通知它的所有观察者它当前的状态(比如Views)。 - Views通常被认为是应用中的用户界面(比如你的标记和模板)。但不一定是。Views需要知道已经存在的Models以便于观察它们,但不用直接跟它们通讯。
- Controllers控制了应用中的输入(比如点击,用户操作)和视图(可以看作是输出)。当一个Controller更新一个Model的状态时(比如编辑Todo的内容),它不会直接告诉View。这就是View和Model之间自然的观察关系。
JavaScript‘MVC’框架可以帮助我们不用总是严格的遵循上面的模式来组织代码。有些框架会在View中包含Controller的功能(比如 Backbone.js),有些框架会整合他们自己认为更有效的组件。
出于这种原因我们把这类框架称之为MV*模式,就是,你可能有View和Model,但是更可能还包含其它东西。
什么是Backbone.js?
Backbone.js是一个构建client端代码的轻量级JavaScript框架。它可以非常容易的管理和解耦应用,使你在长远中更容易维护代码。
开发者通常使用Backbone.js创建单页应用或者SPA。简单的说,这些应用可以让浏览器在client端对数据的改变做出响应而不用从服务器端完整地加载你的标记,意味着不用整个重新刷新页面。
在我写这本书的时候Backbone.js是一个成熟、流行的框架,有庞大的开发者社区,丰富的插件和扩展。它被Disqus、Walmart、SoundCloud还有Foursquare用来构建伟大的应用。
你何时需要一个Javascript MV*框架?
当用JavaScript构建一个单页应用的时候,不管它包含一个复杂的用户界面还是简单的,尝试减少创建新Views时的HTTP请求,你可能会发现自己通过MV*框架,比如Backbone.js,创建了很多小块。
在起初,写个避免嵌套式代码的框架并不难,但是同样说写些关于Backbone的标准也不重要是不对的。
如何架构一个应用比尝试组合DOM操作库,模板和路由来的更重要。成熟的MV*框架通常不仅包含可能你发现自己会写的一些模块,还包含在之后的过程中你可能会发现的问题的解决方案。这其中节省的时间你不可低估。
所以,你何处需要MV*框架而何处不需要?
如果你要开发一个只需要跟API或者后台数据服务通讯的应用,应用随着数据在浏览器中的变化会有偏重量级的展现和控制,你将会发现MV*框架非常有用。这类比较好的例子就是GMail和Google Docs。
这种应用通常下载一个包含所有脚本、样式、用户常用任务标记的载体,然后在后台完成添加一系列的行为。你可以在阅读email或者要写的一个文档之间来回切换而根本不需要这个应用去重新渲染整个页面。
但是,如果你要构建一个大部分繁琐的视图/页面依然依赖服务器端的应用,只需要一点Javascript或用jQuery实现一点交互,MV框架就可能有点过重了。当然有复杂的Web应用,对视图的局部刷新可以有效的结合单页应用的方式,但不管怎样,坚持简单的原则总会让你驾驭自如。
一个软件(框架)发展的成熟度不是简单的因其存在了多长时间。而是这个框架的可靠程度和它扮演的角色的重要程度。它在解决通用问题上是否有效?随着开发人员使用它构建更大、更复杂的应用框架是否持续改进?
为什么你应该考虑使用Backbone.js?
下面这段话是否可以描述你的经历?:
"我想要一种灵活,能抽象分离应用中所关注的各个部分的东西。它提供了一个持久层,RESTful的同步,模型,视图(包含控制器),基于事件驱动的通讯,模板和路由。必须支持当一个模型变化时允许更新视图。在架构上要留有自由发挥的余地。更理想点,有许多大公司都使用这个方案去构建非凡的应用。
我可能会构建复杂的东西,我希望这个框架有活跃的扩展社区,而且框架的扩展在大量的问题(Marionette, Chaplin, Aura, Thorax)中经过尝试。理想点,还要有解决方案相关的脚本工具(grunt-bbb, brunch)。"
如果是这样的话,请继续阅读…
Backbone的主要优势,无论你的目标平台和设备是什么,都将会帮助你:
- 组织应用的结构
- 简化服务器端的持久性
- 将DOM从页面数据中解构
- 模型数据,视图和路由都有一种简单的风格
- 提供DOM,模型和集合的同步
你可以从这本书中学到什么?
这本书的目的是提供权威和全面的关于Bakbone的信息给开发者帮助他们开发真实的应用。如果你无意中发现你认为可以改进或者补充的地方,请尽情的提交一个pull请求。无需多久,你就可以帮助其它开发人员避免你曾碰到过的问题。
这本书的内容会包含MVC原理,如何用Backbone的模型、视图、集合和路由构建应用。我也会带给你一些跟高级的话题比如使用Backbone.js进行模块化开发和AMD(通过RequireJS),如何使用现代的软件包(比如Node和Express)构建应用,如何使用Backbone和jQuery Mobile解决路由问题,脚本工具的小提示,以及更多其它的东西。