JavaScript MVC框架的目的是什么?

5
我想知道Javascript MVC框架(如Backbone.js和Spine.js)的用途。作为一名热爱/经验丰富的Ruby on Rails开发者,我从未遇到需要另一个MVC层的有用情况。对我来说,这似乎相当愚蠢。我大量使用非侵入式Javascript处理事件和错误处理逻辑,但它无法创建我的视图的类和视图。对于这个领域的无知请谅解,我希望能从经验丰富的开发人员那里得到答案。
7个回答

13

像Backbone.js这样的JavaScript MVC框架是用于为前端添加结构的。

这在构建[越来越流行的]单页JavaScript应用程序(SPJA)时最有用。如果您大量使用不侵入式JavaScript,则可能会进行相当数量的ajax以获取动态内容,以避免在用户上刷新页面。 SPJA将其提升到更高层次,使用户可以访问应用程序的所有区域而无需刷新页面。没有MVC框架提供的结构,客户端代码很快就会失去控制。


1
本文扩展了@sghill所指出的内容:http://andyet.net/blog/2010/oct/29/building-a-single-page-app-with-backbonejs-undersc/ - Hector Correa

5
如果您的Web前端只是表示层(即视图),而所有数据和应用程序逻辑都驻留在服务器上,那么具有双重MVC就绝对是多余的。
然而,许多现代复杂的Web应用程序尝试通过创建高度互动的前端来最大化用户体验,这些前端使用Ajax或类似替代方案(例如Flash AMF)与服务器进行动态通信。在这种情况下,您的应用程序前端需要将处理实际与服务器通信的脚本部分与管理已在客户端系统中获取/缓存的本地数据的适当规定,用户交互事件处理以及历史记录管理分离出来。一旦您开始思考,很快就会明显,因为在JavaScript代码中拥有一个单独的MVC层是个好主意,因为它能够很好地适应情况并使代码可管理。
例如,在像Facebook这样的应用程序中,当放大图片时按下L键或单击“喜欢”按钮等用户交互事件实际上会映射到相同的操作,因此,这个操作应该与构造视图和附加事件处理程序的部分分离开来。实际将更新的元数据信息发送到服务器可以再次分离出来,因为这个部分可以被重复利用,从而更新需要与服务器进行通信的元数据的任何操作。同样,元数据的验证在更新元数据的不同用户操作中是可重用的。
通过这个例子,我希望向您传达MVC设计如何与Web前端相匹配的概念。

2

你有没有穿着西装去面试?同样的道理。

如果雇主认为前端开发者整天都在编写这样的代码,那么他们不会愿意支付 $95K/年的薪水:

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

但是,如果你开始谈论MVC、node、Angular、backbone、AJAX、RESTful或JSON等技术,他们认为你是计算机科学的前沿人物。

PHP框架也是如此。任何一位年薪4万美元的CRUD应用程序编写者都可以整天写这些:

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

但是,如果你开始提到MVC、Yii、Laravel、Symfony或Zend……就像穿上带补丁的斜纹布外套,手持“年度教授”咖啡杯。


2

我认为这个框架更适用于构建复杂的JS应用程序。使用ajax来更新/保存数据。例如,MVC框架可以更轻松地构建一个JS计算器应用程序。以上仅为个人见解。


2

有些应用架构师只想在服务器中拥有数据层功能,而在客户端中使用轻量级的Web服务接口。在这种情况下,在客户端中使用MVC架构是很有用的。

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

然而,在许多情况下,你可能想要将处理卸载到客户端上。在这种情况下,你可能想要将视图处理移动到客户端(例如使用AJAX)。或者你可能想让客户端确定是否呈现HTML、XHTML、HTML5或其他内容。或者你可能想要在客户端使用一些本地存储来缓存数据。或者你可能想要在浏览器中进行数据验证和视图组合。

有些应用架构师只想在服务器中拥有数据层功能,并使用轻量级的Web服务接口。在这种情况下,使用MVC架构在客户端是明智的,因为你最终需要处理模型层问题,如验证、复杂视图、数据过滤,控制器层问题,例如视图格式决策,以及视图层问题,如布局、渲染和样式。


0
与任何其他编程语言一样,JavaScript代码需要以下内容: * 抽象化(关注点分离) * 隐式约定和一致性 * 代码可重用性
当然,您可以使用Vanilla JS来实现这些,但是您需要自己编写框架。因此,最好选择一个现有的知名且经过验证的解决方案。
这些是核心要求,其他要求取决于您允许框架限制开发流程的程度。

0

我们使用Backbone.is来构建单页应用程序(SPA),有点像Gmail。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接