0

MVC 代表模型、视图和控制器。Backbonejs.or 通过与 Rails 的比较来解释这一点,更多内容请参见此处和下方。因为不了解Rails,所以比较毫无意义。下面的摘录突出显示了控制器,这可能不是严格意义上的 MVC 的原因——不确定它推断出什么。Backbone 不是严格的 MVC 是什么意思?

摘自 Backbonejs.org -site(来源在这里)。

Backbone 与“传统”MVC 有何关系?

模型-视图-控制器模式的不同实现往往对控制器的定义存在分歧。如果有帮助的话,在 Backbone 中,View 类也可以被认为是一种控制器, 调度源自 UI 的事件,而 HTML 模板作为真正的视图。我们称它为 View 是因为它代表 UI 的逻辑块,负责单个 DOM 元素的内容。

将 Backbone 的整体结构与 Rails 等服务器端 MVC 框架进行比较,各部分排列如下:

  • Backbone.Model – 就像 Rails 模型减去类方法。在业务逻辑中包装一行数据。
  • Backbone.Collection – 一组客户端模型,具有排序/过滤/聚合逻辑。
  • Backbone.Router – Rails routes.rb + Rails 控制器操作。将 URL 映射到函数。
  • Backbone.View – 一个合乎逻辑的、可重用的 UI。通常但不总是与模型相关联。
  • 客户端模板——Rails .html.erb 视图,渲染一大块 HTML。

我添加了斜体以强调为什么它显然不是 MVC。在上面我可以找到模型和视图 - 术语 - 但该术语controller被明确省略,而不是使用术语路由器、集合和模板。为什么路由器/集合/模板不是控制器?

我发现这个控制器定义controller mediates input, converting it to commands for the model or view此处为维基百科)有点模糊。

4

2 回答 2

2

很有趣的说法,特别是因为 Rails 离实现 MVC 启发的设计模式还很远。实际上,我想说的是,BackboneJS 的解释更接近于 MVC 思想。

视图不应该只是一个愚蠢的模板。它应该负责所有的表示逻辑(并且,在经典 MVC、Model2 MVC 和 HMVC 模式的情况下,一个活动结构)。

Rails 框架实现的内容可以更好地描述为“ORM、模板、适配器”反模式,其中业务和表示逻辑都被迫进入他们所谓的“控制器”。

BackboneJS 实现的实际上更接近于 MVVM 设计模式,其中 viewmodel 为被动视图提供信息。然后视图决定如何处理它以及使用哪些模板。

于 2012-07-30T17:39:46.780 回答
0

据我了解,传统的 MVC 模式具有以下要素:

模型 - 仅保存数据(可能是一些数据处理方法)

视图 - 呈现向用户展示部分数据的可视化和交互式元素。

控制器 - 处理模型和视图之间以及用户和代码之间的交互(例如,当模型更新时,重新渲染视图,当用户单击按钮时,更改模型中的数据)。

在 Backbone 中,没有明确的控制器。相反,此控制功能由以下人员执行:a) 视图本身(例如,设置事件侦听器以更新用户操作的模型) b) 处理要显示哪些视图的路由器和 c) 索引文件或其他 HTML/JS 代码。

于 2012-07-31T00:44:49.210 回答