JavaScript MVC框架

11

现在有许多Javascript MVC框架可用(Backbone.js,Cappuccino,Ember.js,GWT等),每个框架都有其优点和缺点。

  1. 与普通Javascript相比,MVC框架提供了哪些实际好处?
  2. 答:MVC框架可以帮助开发者更好地组织代码,并使代码更容易维护。它将应用程序分为三个部分:模型(Model),视图(View)和控制器(Controller),并且允许它们在彼此之间进行解耦。这使开发人员能够更轻松地添加新功能和进行修改,而无需担心代码的其他部分会受到影响。
  3. 所有框架是否大多基于jQuery?
  4. 答:不是所有框架都基于jQuery。虽然jQuery是最常用的Javascript库之一,但许多框架也可以在没有jQuery的情况下使用。
  5. 如何决定选择哪个框架?在确定某个框架之前需要问什么问题?
  6. 答:选择框架时需要考虑以下几个因素: - 框架的目标市场和用途是否符合您的需求? - 框架的社区规模和支持程度如何? - 框架的文档是否完整且易于理解? - 框架是否易于学习和使用?
  7. 关于MVC,我有一个具体问题,即有一些框架可以在模型/数据更改后立即更新视图……那么这是否可以通过AJAX实现?
  8. 答:是的,可以使用AJAX来实现即时更新视图。当模型/数据发生更改时,您可以使用AJAX将更改推送到服务器,并在成功响应之后刷新视图。


1
可能是[哪个JavaScript框架(jQuery vs Dojo vs ...)?]的重复问题(http://stackoverflow.com/questions/394601/which-javascript-framework-jquery-vs-dojo-vs)。 - dynamic
4
这并不是那个问题的副本。Testndtv询问的是关于MVC框架的,而你所提到的问题则是关于主要用于DOM操作和视觉效果的框架。 - laurens peeters
@laurens peeters:完全正确...我指的是特定的Javascript MVC框架,而不是普通的jQuery、Dojo、Mojo等。 - copenndthagen
3个回答

4
MVC模式相比标准JavaScript有架构优势-它帮助您编写更有条理、更易于维护的代码。这是一种经过多种语言和程序员世代使用和广泛测试的模式。如果您想做某事,很可能已经有其他人做过了,因此使用经过时间考验的模式可以使您利用该模式的好处,而不犯早期程序员的错误,从而节省您的时间和精力。
Backbone并非基于jQuery,但它与jQuery兼容,并在Views中提供了对$el视图容器的缓存引用。但是,如果您使用Zepto而不是jQuery,则$el被包装在Zepto功能而不是jQuery中。
YUI具有MVC组件并完全不基于jQuery ;)
选择使用哪个框架取决于当前项目的需求、框架的文档、其基础社区等。这与选择使用哪个JS库或后端框架等相同。对于一个人/项目合适的东西,对于另一个人/项目可能不合适。

4
  • MVC框架相比普通Javascript提供了哪些实际好处?
  • 当您需要组织代码并在应用程序中分离关注点时,框架非常有用。
  • 所有的框架主要都是基于jQuery吗?
  • MVC框架与jQuery无关,jQuery主要用于DOM操作、动画等方面,但它们可以具有类似于jQuery的特性,例如事件系统、Ajax等等。
  • 如何决定使用哪个框架?在确定某个框架之前,需要问哪些问题?
  • 您需要测试它们,首先编写一个没有框架的应用程序,然后尝试使用框架重构您的代码,看看是否容易使用。
  • 我对MVC有一个具体的问题,有一些框架会在模型/数据更改后立即更新视图……那么这是否可以通过AJAX实现?

  • 它们都以某种方式做到了这一点,这就是MVC的目的。当模型更改时,通知视图重新渲染自己……但它们的实现方式不同。

现在 ,在我看来,使用jQuery,您实际上不需要“外部”MVC框架,因为jQuery已经具有内置的事件系统、大量帮助函数,而且javascript对象足够动态,可以在运行时附加任何行为,而无需定义对象的“类”。

我的观点是:您可以使用jQuery自己的MVC,所有工具都已经在库中了。

如果您需要其他功能,例如“路由器”、“验证辅助程序”、“脚手架”等等……那么MVC框架就是最好的选择。


1
我不会说它们全部在模型更改时自动重新渲染视图。Backbone 让你自己实现视图的渲染,包括在模型更改后重新渲染它们。即使使用 jQuery,仍然需要 MVC(或其他架构模式)。已经确定,单独使用 jQuery 不适用于创建“大型”非平凡 JavaScript 应用程序,请参见:http://blog.rebeccamurphey.com/on-jquery-large-applications - danwellman
当然,当模型发生变化时,视图的行为由您编码决定。框架不是神奇的东西,您不能只需将.js文件放入HTML中就能使其工作。 - mpm
我不同意Rebecca Murphy的观点。当人们能够发送和监听事件时,就已经足够实现自己的MVC了。毕竟,MVC只是策略模式和观察者模式的混合体。为什么你需要特别的东西来在JavaScript中强制这些模式?只需创建具有所需行为的对象即可。能够触发/订阅事件就足以实现观察者模式。而实现策略模式也不需要任何特殊的东西,只需要两个对象。 - mpm
1
并非所有的框架都会在模型数据更改时自动重新渲染视图,例如 Knockout.js。如果你知道这一点,为什么还要说“它们都以某种方式实现了这一点,这就是 MVC 的目的”呢? - danwellman
1
在我看来,Knockout根本不是MVC。它更像是MVVM或MVP。 - mpm
1
毫无疑问,它绝对是MVVM。Backbone也被认为不是真正的MVC,而是“在MV*家族中”,Knockout也可以被认为是其中之一。 - danwellman

3
以下是您需要翻译的内容:
  1. 好处:

    • 可重用的代码
    • 将视图逻辑与业务逻辑分离
    • 更易于维护/文档化
  2. 并非如此。例如,ExtJS 的起源来自 GWT(如果我没记错的话)。

  3. 您需要考虑您尝试做的事情的复杂性和规模,并权衡各种框架的学习曲线/成本(时间和金钱)与您所需的功能之间的利弊。例如,如果您需要强大的数据网格和高级小部件,则 extJS 可能是不错的选择。但是,如果您需要更轻量级的解决方案,则 Django 可能是更好的选择(仅举个例子)。
  4. 是的,所有这些都是通过 AJAX 完成的。在 ExtJS 4 中,当您向附加到网格的存储添加记录时,网格会自动更新。

希望这可以帮到您。


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