Backbone.js真的是MVC吗?

时间:2012-05-24 21:47:41

标签: javascript model-view-controller model backbone.js

backbone.js被称为Javascript的MVC框架。但是吗?

以下是来自http://documentcloud.github.com/backbone/

的模型说明
  

模型是任何JavaScript应用程序的核心,包含交互式数据以及围绕它的大部分逻辑:   转换,验证,计算属性和访问控制。您   使用特定于域的方法和Model扩展Backbone.Model   提供了一组用于管理变更的基本功能。

现在,根本不是我对MVC模型的理解。根据我的理解,模型只是模拟域的类,因此您的学生,学校和教师对象。控制器确实对它们执行业务逻辑并与视图交互以显示和接收输入。

这种理解与我在网络上发现的各种定义一致,IE http://en.wikipedia.org/wiki/Model_view_controller

  

模型 - 视图 - 控制器(MVC)是计算机用户的设计模式   将应用程序划分为三个区域的接口   责任:

     

模型:域对象或数据结构   表示应用程序的状态。

所以,我的问题是:在任何意义上,backbone.js真的是一个MVC框架,还是更像是帮助你把所有东西粘在一起的一般方法?

顺便提一下,来自backbone.js常见问题解答的模型定义似乎与我上面引用的模型不同(也来自backbone.js http://documentcloud.github.com/backbone/#FAQ-mvc

  

Backbone.Model - 就像Rails模型减去类方法一样。在业务逻辑中包装一行数据。

那么在什么意义上,backbone.js真的是一个MVC?

(警告:我目前只评估backbone.js。)

6 个答案:

答案 0 :(得分:19)

Backbone是MV *(MV-star)之一。有无控制器,因为操作应用程序的逻辑在视图中(类似于M(V + C))。

" Model"没有统一的定义。因为它在不同语言的不同框架中使用不同。但通常,模型只是数据存储的抽象,并且可选地具有一些逻辑,如验证,格式化和状态更改挂钩。

答案 1 :(得分:11)

当你试图找到“ M ”(模型)“ V 时,它有点令人困惑 “(查看)和” C “(控制器)。

通过这种方式,我们总能在条款上争论,但重要的是打算。

将“条款”与“意图”相交:

“M”:

Backbone 模型收藏集模型相关联。

“V”:

默认的 Underscore.js 模板代表标准 MVC

的“查看意图

“C”:

Backbone 查看控制器。它在骨干中称为查看(与许多其他像 Django 一样),因为它处理渲染。从 MVC 的角度来看它是一个Controller。 路线视图

相关联

现在,有时只是为了满足 MVC 缩写,有人称之为“模型视图集合”。但这不应该说。

答案 2 :(得分:2)

我认为你的名字已经挂了。并非每个MVC框架都遵循相同的命名约定。例如,在Django中,控制器称为视图,视图称为模板。 Backbone遵循类似的命名模式。注意,Backbone在视图部分非常灵活,不强制执行任何特定的模板库。

如前所述,Backbone模型中包含的逻辑是模型所关注的逻辑。标准关系数据库是模型(表)的集合,通常关注列中的数据类型。

通常会出现在控制器中的逻辑(Backbone的“视图”)会像处理瞬态会话数据,检查用户状态(例如,通过身份验证,虽然您不会在js中执行此操作),绑定视图到模型(Backbone就是这样做的,管理基于用户操作和绑定模板存储/创建模型的位置和时间,以更新模型更改)。

总而言之,Backbone实际上非常适合MVC,比大多数服务器端“MVC”框架要好得多,后者通常是真正的“PAC”框架(Presentation-Abstraction-Control)。

答案 3 :(得分:2)

两者都有。如果你正在看严格意义上的模型;也就是说,模型只是数据,然后是数据。但是验证,转换等都已经放在那里,因为Backbone相当以模型为中心。根据我自己的经验,我通常会对传统意义上的Backbone模型进行处理,因为模型是应用程序对后端数据存储的表示,并且它只是操作该数据的访问器方法。

重点是虽然存在验证或执行访问控制等功能,但您可以选择遵循更经典的MVC模式。这完全取决于你。我对Backbone的喜爱之处在于它为您提供了一个MVC引擎,您可以在其上构建整个应用程序架构。如果你想要遵循经典的MVC设计模式,你当然可以做到这一点。干杯!

答案 4 :(得分:1)

在backbone.JS MVC 代表模型视图集合 ......

答案 5 :(得分:1)

如果你在Backbone.js中寻找控制器,你可能想看看这个:http://chance-an.github.com/backbone-mvc/