我想知道Javascript MVC框架的目的,例如Backbone.js和Spine.js。作为一个狂热/经验丰富的Ruby on Rails开发人员,我从未有过一个有用的案例,我需要为我的应用程序提供另一个MVC层。这对我来说似乎很愚蠢。我大量使用不显眼的Javascript来处理事件和错误处理逻辑,但它没有为我的视图创建类和视图。
请原谅我在这方面的无知,但我非常希望得到经验丰富的开发人员的回答。
答案 0 :(得分:12)
像Backbone.js这样的JavaScript MVC框架用于向前端添加结构。
这在构建[越来越受欢迎的]单页JavaScript应用程序(SPJA)时非常有用。如果你大量使用不引人注目的JavaScript,你可能会为动态内容做大量的ajax,以避免刷新用户的页面。 SPJA更进一步,让用户访问应用程序的所有区域,而无需刷新页面。如果没有MVC框架提供的结构,客户端代码很快就会失控。
答案 1 :(得分:4)
如果您的网络前端只是表示层,那么拥有双重MVC绝对是多余的。视图和所有数据以及应用程序逻辑都驻留在服务器上。
然而,许多现代复杂的Web应用程序试图通过创建高度交互的前端来最大化用户体验,这些前端使用Ajax或类似的替代方案与服务器动态通信。 Flash AMF。 在这种情况下,在您的应用程序的前端,分离处理与服务器的实际通信的脚本部分,提供适当的规定来管理在客户端系统中提取/缓存的本地数据,用户交互事件处理和历史管理。一旦你开始考虑它,很快就会发现在javascript代码中有一个单独的MVC层是一个好主意,因为它非常适合场景并使代码易于管理。
例如,在像Facebook这样的应用程序中,用户交互事件如在放大图片时按L,或者点击Like按钮实际上映射到相同的操作,因此该操作应该与构建视图的部分分离并附加事件处理程序。实际上将更新的元数据信息发送到服务器可以再次分离出来,因为该部分可以被重新用于更新需要传送回服务器的元数据的任何动作。类似地,元数据的验证可以在更新元数据的不同用户操作之间重复使用。
通过这个例子,我希望传达MVC设计如何适应网络前端的概念。
答案 2 :(得分:2)
我认为该框架更倾向于构建复杂的JS应用程序。使用ajax更新/保存。例如,MVC框架可以更容易地构建一个js Calculator应用程序。只是我的2岁。
答案 3 :(得分:2)
某些应用程序架构师只希望服务器中的数据层功能具有瘦Web服务接口。在这种情况下,在客户端中使用MVC架构是有用的。
在一天结束时,它取决于您想要放置控制器和查看功能的位置。如果你想在服务器上使用Rails而不使用任何AJAX。在服务器中具有模型层允许您在服务器中编码复杂的关系,视图和验证。它允许您的控制器响应不同的数据格式(例如xml,html,json)。它允许您使用ERB或HAML来控制视图。
但是在许多情况下,您可能希望将处理卸载到客户端。在这种情况下,您可能希望将视图处理移动到客户端(例如使用AJAX)。或者您可能希望让客户端确定是否呈现html,xhtml,html5等等。或者您可能希望使用一些本地存储来缓存客户端中的数据。或者您可能希望在浏览器中进行数据验证和查看合成。
某些应用程序架构师只希望服务器中的数据层功能具有瘦Web服务接口。在这种情况下,在客户端中使用MVC架构是谨慎的,因为最终必须处理模型层问题,例如验证,复杂视图,数据过滤,视图格式化决策等控制器层问题和视图层问题,如布局,渲染和样式。
答案 4 :(得分:2)
曾经在面试时穿西装?同样的事情。
如果Nobdy认为他整天都在编写类似这样的内容,那么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 app编程器都可以写一整天:
$user_name = trim(strtolower($user_name));
echo 'Your name: ' . $user_name . '<br/>';
但是如果你开始提到MVC,Yii,Laravel,Symfony或Zend ......就像穿上一件带有补丁的斜纹软呢夹克,拿着一个咖啡杯,上面写着“年度最佳教授”。
答案 5 :(得分:0)
我们将Backbone.is用于SPA(单页应用程序)。有点像gmail。
答案 6 :(得分:0)
与任何其他领带相同,需要JavaScript代码: *抽象(关注点分离) *隐含的约定和一致性 *代码可重用性
当然,您可以使用Vanilla JS获取它,但必须自己编写一种框架。所以你宁愿采用现有的知名解决方案。
这些是核心要求,任何其他要求取决于您允许框架限制开发过程的程度。