Javascript MVC框架的目的[关闭]

Posted

技术标签:

【中文标题】Javascript MVC框架的目的[关闭]【英文标题】:Purpose of Javascript MVC frameworks [closed] 【发布时间】:2011-12-20 20:47:56 【问题描述】:

我想知道 Backbone.js 和 Spine.js 等 javascript MVC 框架的用途。作为一名***/经验丰富的 Ruby on Rails 开发人员,我从来没有遇到过需要为我的应用程序添加另一个 MVC 层的有用案例。这对我来说似乎很愚蠢。我大量使用不显眼的 Javascript 来处理事件和错误处理逻辑,但它并没有为我的视图创建类和视图。

请原谅我在这方面的无知,但我绝对希望从有经验的开发人员那里得到答案。

【问题讨论】:

【参考方案1】:

Backbone.js 等 JavaScript MVC 框架用于为您的前端添加结构。

这在构建 [越来越流行的] 单页 JavaScript 应用程序 (SPJA) 时最有用。如果您大量使用不显眼的 JavaScript,那么您可能会为动态内容执行大量 ajax,以避免在用户上刷新页面。 SPJA 更进一步,让用户无需刷新页面即可访问应用程序的所有区域。如果没有 MVC 框架提供的结构,客户端代码会很快失控。

【讨论】:

这篇文章扩展了@sghill 指出的内容:andyet.net/blog/2010/oct/29/…【参考方案2】:

如果您的 Web 前端只是表示层,即具有双重 MVC 绝对是多余的。视图和所有数据以及应用程序逻辑都驻留在服务器上。

然而,许多现代复杂的网络应用程序试图通过创建高度交互的前端来最大化用户体验,这些前端使用 Ajax 或类似的替代方案与服务器进行动态通信。闪存 AMF。 在这种情况下,在应用程序的前端,分离出处理与服务器的实际通信的脚本部分,为管理已在客户端系统中获取/缓存的本地数据、用户交互事件处理和历史管理提供适当的规定。一旦您开始考虑它,很快就会发现在 javascript 代码中拥有一个单独的 MVC 层是一个好主意,因为它非常适合场景并使代码易于管理。

例如,在 Facebook 之类的应用程序中,当图片放大时按下 L 或单击“Like”按钮等用户交互事件实际上映射到相同的操作,因此该操作应该与构建视图的部分分离并附加事件处理程序。实际将更新的元数据信息发送到服务器可以再次分离出来,因为这部分可以重新用于更新需要传送回服务器的元数据的任何操作。类似地,元数据验证可在更新元数据的不同用户操作中重复使用。

我希望通过这个示例传达 MVC 设计如何与 Web 前端相适应的概念。

【讨论】:

【参考方案3】:

我认为该框架更倾向于构建复杂的 JS 应用程序。使用 ajax 更新/保存。例如,MVC 框架将使构建 js 计算器应用程序变得更加容易。只是我的 2cent。

【讨论】:

【参考方案4】:

一些应用程序架构师只希望服务器中具有瘦 Web 服务接口的数据层功能。在这种情况下,在客户端拥有 MVC 架构很有用。

归根结底,这取决于您要将控制器和视图功能放在哪里。如果你想在服务器中使用 Rails 而不需要任何 AJAX。在服务器中拥有一个模型层可以让您在服务器中编码复杂的关系、视图和验证。它可以让你的控制器响应不同的数据格式(例如 xml、html、json)。它允许您使用 ERB 或 HAML 来控制视图。

但是,在许多情况下,您可能希望将处理任务交给客户端。在这种情况下,您可能希望将视图处理移至客户端(例如使用 AJAX)。或者您可能希望让客户端确定是否呈现 html、xhtml、html5 或其他内容。或者您可能希望使用一些本地存储来缓存客户端中的数据。或者您可能想在浏览器中进行数据验证和视图合成。

一些应用程序架构师只希望服务器中具有瘦 Web 服务接口的数据层功能。在这种情况下,谨慎使用客户端中的 MVC 架构很有用,因为您最终将不得不处理模型层问题,例如验证、复杂视图、数据过滤、控制器层问题(例如视图格式决策) ,以及视图层问题,例如布局、渲染和样式。

【讨论】:

【参考方案5】:

曾经穿西装去面试吗?一样的。

如果 Nobdy 认为前端开发人员整天都在编写这样的代码,他们将向前端开发人员支付 95,000 美元/年:

form1.user_name.value = 'John Doe';
form1.user_name.onclick = function()  form1.user_name.value = ''; 

但是,如果您开始对 MVC、节点、Angular、骨干网、AJAX、RESTful 或 JSON 嗤之以鼻……他们认为您处于计算机科学的最前沿。

php 框架也是如此。任何年收入 4 万美元的 CRUD 应用程序编码员都可以整天写这个:

$user_name = trim(strtolower($user_name));
echo 'Your name: ' . $user_name . '<br/>';

但是,如果你开始提到 MVC、Yii、Laravel、Symfony 或 Zend……就像穿上肘部有补丁的粗花呢夹克,拿着一个写着“年度教授”的咖啡杯。

【讨论】:

【参考方案6】:

我们将 Backbone.is 用于 SPA(单页应用程序)。有点像gmail。

【讨论】:

【参考方案7】:

与任何其他领带一样,需要 JavaScript 代码: * 抽象(关注点分离) * 隐式约定和一致性 * 代码重用性

您当然可以使用 Vanilla JS 来获得它,但必须自己编写一种框架。因此,您宁愿采用现有的知名且经过验证的解决方案。

这些是核心要求,其他任何取决于您允许框架限制您的开发过程的程度。

【讨论】:

以上是关于Javascript MVC框架的目的[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

是否有 JavaScript MVC(微)框架? [关闭]

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

JavaScript 和 Lua 之间的细微差别 [关闭]

MVC 视图和 JavaScript 文件

哪个是涉及图表的最佳开源 JavaScript 移动框架? [关闭]

支持子项目的服务器端MVC框架