Backbone.js 的适用场景非常广,无论是 Web-Page 还是 Web-App 都可以应用,但最合适的还是大型的 Web-App,对于中小型项目来讲 Backbone.js 的 MVC 结构还是有点臃肿了,用不好很容易 over design。Backbone.js 是非常典型的 MVC 框架,但是相对于传统的 server 端 MVC 来讲还是有一些特殊的地方的。
首先 Backbone 中的几大核心组件 View、Model、Collection、Router 中并没有 Controller。其实 v0.5 以前是有 Backbone.Controller 这个东西的,但由于做的根本不是 C 的事情,这个名字又太具有迷惑性了,后来改名叫做 Backbone.Router。而真正的 C 其实是 Backbone.View,但这个 View 其实是部分的 C(还有一部分在 Backbone.Router 中) + 部分的 V,由于前端的模板功能有限,很多应该在 template 中做的事情不得不被拿到 Backbone.View 中来实现。
其次,由于 MVC 的概念中认为 V 其实是永远不知道用户输入(鼠标、键盘事件等)的,C 是输入和 V 之间的连接,但在浏览器中这点其实是实现不了的,V 就是 HTML,而用户输入是基于 HTML 页面的,所以你可以忽略用户输入,把所有事件都导入到 C 去处理,但不代表 V 不知道这件事情。所以前端的 MVC 多少是对传统的 MVC 模型做了些改变的实现,近些日子更多的人转向 MVVM 就是这个原因。
Backbone.js 的优点:
1. 代码质量比较高,通读一遍还是能学到不少东西的。
2. 只做框架该做的事情,不做高大全的东西。所以很容易和其他的工具或框架整合。比如有人搞了 Bakcbone.js + Knockout.js 的 Knockback.js。
3. 分层的结构很清晰,使得前端工程在扩展性和维护性上都可以进行有效控制。
Backbone.js 缺点:
1. Model 结构比较简单,如 @pw 所述,多对多、但对多的数据模型很难搞,用对象做属性也不行。
2. 内存控制,View 很容易产生 memory leak 的问题,不过这也和代码的质量有关系,近期的更新有一些是针对这方面的。
to @pw:
我觉得 Sync 写的简单并不算缺点,源码里写明了这部分要根据具体业务需求重载掉的,很容易进行扩展。
P.S. 今年下半年更新比较缓慢,目前停留在 0.9.9,坊间传闻是在憋大招,1.0 会有惊喜。
P.S. 豌豆荚 PC 客户端 2.0 全部是使用 Backbone.js 框架开发的。