Backbone.js 真的是 MVC 吗? [关闭]

Posted

技术标签:

【中文标题】Backbone.js 真的是 MVC 吗? [关闭]【英文标题】:Is Backbone.js really an MVC? [closed] 【发布时间】:2012-05-31 12:38:16 【问题描述】:

backbone.js 被称为 javascript 的 MVC 框架。但真的吗?

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

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

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

这个理解和我在网上找到的各种定义是一致的,IEhttp://en.wikipedia.org/wiki/Model_view_controller:

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。)

【问题讨论】:

这就是为什么许多人将此类框架称为 MV* 请注意作为模型一部分指示的 逻辑 类型:“转换、验证、计算属性和访问控制。”在任何 MVC 应用程序中,这些都是明智的领域对象关注点。它们与应用程序/业务逻辑不同,例如视图之间的路由、向数据库发送更新等,这些通常是控制器的职责。 我真的应该对此投反对票(但我没有这样做)这显然像是为了赚取代表的阴谋!但无论如何,没有人说 Backbone 是 MVC 吗? 他们将其解释为一个通过使用模型、视图、集合和路由器来提供结构的库(再次没有提到它与 MVC 的相似之处)人们不能帮助他们做出错误的假设吗?? So in what sense is backbone.js really an MVC or not? 我知道这是一篇旧帖子,但恕我直言,这个问题不具建设性,也不符合 SO Q&A 格式。这个问题没有答案,只有个人意见和假设。 【参考方案1】:

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

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

【讨论】:

为什么要把逻辑放在视图中?【参考方案2】:

当您尝试找到“M”(Model)“V”时,这有点令人困惑 "(View)和“C”(Controller)。

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

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

“M”:

主干模型CollectionsModels 相关联。

“V”:

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

“C”:

Backbone ViewController。它在主干中称为 View(就像在许多其他类似 Django 中一样),因为它处理渲染。从 MVC 的角度来看,它是一个控制器。 RoutesViews

相关联

现在,有时只是为了满足 MVC 缩写,有些人称之为“Model View Collections”。但这是不应该说的。

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

在backbone.JS中MVC代表MODEL VIEW COLLECTION...

【讨论】:

【参考方案6】:

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

【讨论】:

以上是关于Backbone.js 真的是 MVC 吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Backbone.js + Spring MVC。保存模型

将服务器端 MVC 与 Backbone.js 相结合

Backbone.js快速入门

Backbone.js快速入门

Backbone.js vs Express vs Next JS ...和JSP? [关闭]

Backbone.js 能够做 rest 和 localstorage 吗?