Model view controller Javascript MVC框架的用途

Model view controller Javascript MVC框架的用途,model-view-controller,web-applications,backbone.js,Model View Controller,Web Applications,Backbone.js,我想知道Javascript MVC框架(如Backbone.js和Spine.js)的用途。作为一名狂热/经验丰富的RubyonRails开发人员,我从未遇到过需要为我的应用程序提供另一个MVC层的有用案例。在我看来,这太傻了。我大量使用不引人注目的Javascript来处理事件和错误处理逻辑,但它没有为我的视图创建类和视图 请原谅我在这方面的无知,但我肯定希望有经验的开发人员能回答这个问题。我认为该框架更倾向于构建复杂的JS应用程序。使用ajax进行更新/保存。例如,MVC框架将使构建js计

我想知道Javascript MVC框架(如Backbone.js和Spine.js)的用途。作为一名狂热/经验丰富的RubyonRails开发人员,我从未遇到过需要为我的应用程序提供另一个MVC层的有用案例。在我看来,这太傻了。我大量使用不引人注目的Javascript来处理事件和错误处理逻辑,但它没有为我的视图创建类和视图


请原谅我在这方面的无知,但我肯定希望有经验的开发人员能回答这个问题。

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

JavaScript MVC框架(如Backbone.js)用于向前端添加结构


这在构建[日益流行的]单页JavaScript应用程序(SPJA)时非常有用。如果您大量使用不引人注目的JavaScript,那么您可能会对动态内容使用大量ajax,以避免刷新用户的页面。SPJA更进一步,允许用户访问应用程序的所有区域,而无需刷新页面。如果没有MVC框架提供的结构,客户端代码可能会很快失控。

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

一些应用程序架构师只希望服务器中的数据层功能具有精简的web服务接口。在这种情况下,在客户机中使用MVC架构非常有用

最终,这取决于您希望将控制器和视图功能放置在何处。如果您希望在服务器上实现所有功能,请使用不带AJAX的Rails。在服务器中使用模型层可以在服务器中编码复杂的关系、视图和验证。它允许控制器响应不同的数据格式(例如xml、html、json)。它允许您使用ERB或HAML来控制视图

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


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

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

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

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


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

有没有穿西装去面试过?同样的事情

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

form1.user_name.value = 'John Doe';
form1.user_name.onclick = function() { form1.user_name.value = ''; }
$user_name = trim(strtolower($user_name));
echo 'Your name: ' . $user_name . '<br/>';
但是如果你开始谈论MVC、节点、角度、主干、AJAX、RESTful或JSON……他们会认为你是计算机科学的前沿

PHP框架也是如此。任何一位年收入4万美元的CRUD应用程序程序员都可以整天写这篇文章:

form1.user_name.value = 'John Doe';
form1.user_name.onclick = function() { form1.user_name.value = ''; }
$user_name = trim(strtolower($user_name));
echo 'Your name: ' . $user_name . '<br/>';
$user\u name=trim(strtolower($user\u name));
呼应“你的名字:”$用户名

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

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

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


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

本文对@sghill指出的内容进行了扩展: