Javascript MVC框架[关闭]

Posted

技术标签:

【中文标题】Javascript MVC框架[关闭]【英文标题】:Javascript MVC frameworks [closed] 【发布时间】:2012-03-17 03:24:05 【问题描述】:

现在有很多可用的 javascript MVC 框架(Backbone.js、Cappuccino、Ember.js、GWT 等),每个框架都有自己的优点和缺点。 我的问题是;

    MVC 框架相对于普通 Javascript 提供的实际好处是什么? 所有的框架都是基于jQuery的吗? 如何决定采用哪种框架?在确定某个框架之前,需要问哪些问题? 我对 MVC 提出的一个具体问题是,有一些框架会在模型/数据发生变化时立即更新视图……那么通过 AJAX 可以实现吗?

请用非常基本的实用术语告诉我..

【问题讨论】:

Which JavaScript framework (jQuery vs Dojo vs ... )?的可能重复 这不是那个问题的重复。 Testndtv 正在询问 mvc 框架,您指的是关于主要是 dom 操作的可视化框架的问题。 @laurens peeters:绝对正确...我指的是 Javascript MVC 框架,而不是普通的 jQuery、Dojo、Mojo 等 【参考方案1】:

MVC 提供了优于标准 JavaScript 的架构优势 - 它可以帮助您编写更有条理的代码,因此更易于维护。这是一种已在多种语言和几代程序员中使用和广泛测试的模式。很有可能,如果你想做某事,其他人已经做过了,所以使用经过时间考验的模式可以帮助你利用该模式的好处,而不会犯早期程序员所犯的错误,从而节省你的时间和精力

Backbone 不是基于 jQuery,但它与 jQuery 兼容,如果你使用它,它会给你一些好处,例如在视图中,它为您提供了对 $el 中视图容器的缓存引用。但是如果你使用 Zepto 而不是 jQuery,$el 被包装在 Zepto 功能而不是 jQuery 中。

YUI 有 MVC 组件,完全不基于 jQuery ;)

一个人根据当前项目的需求,框架的文档,它所基于的社区等来决定使用哪个框架。就像选择使用哪个JS库,或者使用哪个后端框架一样,等等。适合一个人/项目的东西可能不适合另一个人/项目

【讨论】:

【参考方案2】: MVC 框架相对于普通 Javascript 有哪些实际好处? 当您需要在应用程序中组织代码和分离关注点时,框架非常有用 是不是所有的框架大部分都是基于jQuery的? MVC 框架与 jQuery 无关,jQuery 在这里主要是做 DOM 操作、动画,但它们可以具有您可以在 jquery 中找到的功能,例如事件系统、Ajax 等... 如何决定使用哪个框架?在确定某个框架之前需要问哪些问题? 您需要测试它们,编写一个没有框架的应用程序,然后尝试使用框架重构您的代码,看看它是否易于使用。

我对 MVC 的一个具体问题是,有一些框架会在模型/数据发生更改时立即更新视图……那么通过 AJAX 可以实现吗?

他们都以某种方式这样做,这就是 MVC 的目的。当模型发生变化时,视图会收到通知并重新呈现自身……但它们以不同的方式进行。

现在,在我看来,使用 jQuery,应该不需要一个“外部”MVC 框架,因为 jQ 已经有一个内置的事件系统、许多帮助函数和 javascript 对象具有足够的动态性,可以在不定义对象“类”的情况下即时将任何行为附加到它们。

我的意思是:你可以用jQuery做你自己的MVC,所有的工具都已经在库中了。

如果您需要其他东西,例如“路由器”、验证助手、脚手架等......那么 MVC 框架就是您的最佳选择。

【讨论】:

我不会说它们都会在模型更改时自动重新渲染视图。 Backbone 让您来实现视图的渲染,包括在模型更改后重新渲染它们。使用 jQuery 时仍然需要 MVC(或其他一些架构模式)。已经确定 jQuery 本身不是为创建“大型”、非平凡的 JavaScript 应用程序而设计的,也没有用处,请参阅:blog.rebeccamurphey.com/on-jquery-large-applications 当然,当模型改变时,视图的行为由你来编写,框架不是一个神奇的东西,你只需要把 .js 文件放在你的 html 中让它工作。 一点也不,一些框架,例如 Knockout.js,当模型数据发生变化时,会神奇地为您重新渲染视图。如果你知道这一点,你为什么说他们都以某种方式这样做,这就是 MVC 的目的 在我看来,Knockout 根本不是 MVC。它更像是 mvvm 或 mvp。 承认,肯定是mvvm。 Backbone 也被认为不是真正的 MVC,而是“在 MV* 系列中”,而 Knockout 也可以被认为是在【参考方案3】:

    好处:

    可重用代码 视图逻辑与业务逻辑分离 更易于维护/记录

    没有。例如,ExtJS 的起源来自 GWT(如果我没记错的话)

    您查看您尝试做的事情的复杂性和规模,并权衡框架学习曲线/费用(时间和金钱)与您需要的功能的利弊。例如,如果您需要强大的数据网格和高级小部件,extJS 可能是您的最佳选择。但是,如果您需要更轻的东西,Django 可能是更好的选择(只是一个示例) 是的,所有这些都是通过 AJAX 完成的。在 ExtJS 4 中,当您将记录添加到附加到网格的存储时,网格会自动更新。

我希望这会有所帮助。

【讨论】:

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

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

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

Web 框架:Play 与 Spring MVC 有何不同? [关闭]

javascript 框架和 Java EE [关闭]

不依赖框架的 MVC 教程? [关闭]

五大JAVA Web框架的优缺点对比,Spring MVC领先