最近用Backbone用得很多,谈下我的一些感受。

Backbone.JS
首先,Backbone是什么东西?
Backbone是这么定位自己的:它对一些重Javascript应用(javascript-heavy application)提供了结构支撑。
这结构支撑的核心组件是:有键值模型支持的Model、有丰富可枚举操作的Collection,和宣言式事件声明的View。
具体的介绍有豆瓣的MVC实践的PPT:http://www.slideshare.net/taobaoued/mvc-8584291
Backbone的确是个好东西,他有着很多优点:
- underscore完整实用的编程API支持
- 各类型组件良好的封装接口
- 集合化对象操作,这方面跟underscore配合是神器
- 全事件化操作,发挥JS的优势
- 默认对RESTFUL接口的全面支持与扩展接口
- 对微框架支持很好,主要是jQuery和mootools。 (而且可以随便进行扩展与改写,里面的模块化与解耦是做得很赞的 )
局限
可惜,必然不会所有人都喜欢Backbone。
因为它的思路很偏向于架构师思维,的确可以做到极高的可维护性,但却使得编码效率有所降低,而且入门门槛会比较高。
它的门槛主要在于,Javascript,和事件化的面向对象机制。
个人感觉,如果没了事件化的支持,那Backbone就只是堆麻烦的条条框框,没有了任何的价值。
所以……
对于只关注于算法、语言结构优化、传输优化、浏览器渲染这类的前端程序员来说,他会不喜欢这么多的限制,而只想用原生的方式,因为那样能完整地对计算机处理进行控制;
对于只关注于语义化、新标准、风格系统、视觉展现、交互设计这类的前端设计师来说,他也会不喜欢,因为可能HTML、基于jQuery的JS对他们来说已经很麻烦,而对象化编程对于他们来说不是同一个次元的东西。
而对于纯粹的后端程序员、云端架构师、DBA或是运维人员什么的来说,也许这些MVC架构、事件模型什么的他们会很清楚,可是……GUI是什么鬼东西?
还好,前端的人们跨界的也是特别多的。而这种架构基础,对于比较大规模的复杂交互的应用来说,肯定是不可或缺的。
对比
就我的经验而言,这应该是——应用结构支撑型框架。
他只是一个支撑,在这个支撑下GUI组件和模型可以有比较好的分层与接口,也可以以事件地方式比较好的组织他们之间的交互。
它跟其它框架不同:
比如jQuery,mootools,prototype,这类属于DOM及兼容性框架,是WEB应用的底层框架;
而像EXTJS,jQueryUI, dojo这类属于GUI框架,是极其高层的框架,代价也就是极多的代码量和比较高的学习成本,当然好处也很明显,上手了就能马上做出应用,而不用再去研究什么HTML/CSS/兼容性/各种细节实现。
它也不是具体的库:
现在多数的库会写好调用并接进jQuery.prototype,以便 DOM 直接进行调用,或是提供特定业务的封装接口。如果硬要说库的话,Backbone里面的router会比较像一个具体业务的实现库,提供了WEB应用对hash的路由,能部分解决AJAX造成的SEO问题。只是个人感觉它还是不太够完美,只支持path而没原生的query支持。这个可能也是见仁见智吧。
总之,现在WEB端的东西算是越来越百花齐放了,这真是让我心花怒放啊!
January 9, 2012 | 8:00 am
百花齐放、万家争鸣~