18

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

这是模型的描述,来自http://documentcloud.github.com/backbone/

模型是任何 JavaScript 应用程序的核心,包含交互式数据以及围绕它的大部分逻辑:转换、验证、计算属性和访问控制。您可以使用特定于域的方法扩展 Backbone.Model,并且 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。)

4

6 回答 6

19

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

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

于 2012-05-24T21:54:05.067 回答
11

当您尝试查找“ M ”(模型)、“ V ”(视图)和“ C ”(控制器)时,它有点令人困惑

这样,我们总是可以就条款进行争论,但重要的是意图。

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

他们” :

骨干模型CollectionsModels相关联。

“V”:

默认的Underscore.js模板代表标准MVC的“视图意图”

“C”:

主干视图控制器。它在主干中被称为View(就像在许多其他人中一样Django),因为它处理渲染。从MVC的角度来看,它是一个控制器。路线视图相关联

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

于 2013-02-20T11:38:25.590 回答
2

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

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

通常会进入控制器(Backbone 的“视图”)的逻辑是处理瞬态会话数据、检查用户状态(例如经过身份验证,尽管您不会在 js 中这样做)、将视图绑定到模型(Backbone 确实正是这一点,根据用户操作和绑定模板管理模型的存储/创建位置和时间,以更新模型更改)。

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

于 2012-05-24T21:57:50.317 回答
2

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

关键是,尽管存在验证或执行访问控制等设施,但您可以选择遵循更经典的 MVC 模式。这完全取决于你。我喜欢 Backbone 的地方在于它为您提供了一个 MVC 引擎,您可以在该引擎上构建整个应用程序架构。如果你想遵循经典的 MVC 设计模式,你当然可以这样做。干杯!

于 2012-05-24T22:00:46.590 回答
1

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

于 2012-08-12T19:43:55.280 回答
1

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

于 2012-05-24T22:46:13.153 回答