我应该为RIA使用哪些架构模式?

时间:2012-04-02 13:29:36

标签: javascript dom web-applications javascript-framework dom-events

我正在构建一个与DOM密切交互的Web应用程序,需要指导我的代码可扩展和可维护。

应用程序概述:在交互时,我有工具栏和覆盖图引导用户编辑页面,然后我将编辑后的页面发送回服务器。

到目前为止,我已经成功构建了我想要的东西,但它的JQuery全部捆绑在一起,我需要有关如何重写代码以使其可扩展和可维护的帮助。

到目前为止的研究:

  • RequireJS - 我看过RequireJS,认为这是一个很好的起点,让一切正常。
  • JQuery - 无法摆脱这个令人敬畏的库。
  • Nicholas Zakas关于可扩展JavaScript应用程序架构的演讲 - 很棒的想法,但我该如何实现呢?我是高级JavaScript的新手。

我还需要某种事件池来管理所有这些事件。如果我使用JQuery的内置事件池“bind”,“trigger”,这是否会让我远离Zakas的想法,即只有我的应用程序核心才能访问我的JQuery库?

我应该考虑采用什么类型的框架来解决我的问题?

1 个答案:

答案 0 :(得分:12)

你实际上问了不止一个问题。我目前正在分析"我应该使用什么框架"我们公司的问题。这比你想象的要多得多。以下是我到目前为止的内容,随着详细信息的获取,我将尝试更新此项目。

与此同时......

架构模式的问题与库或框架的问题不同。

出于多种原因,

ARCHITECTURAL DESIGN PATTERNS 非常有用。一个原因是在模块中实现松耦合。 Mediator Pattern 中提供了如何实现松散耦合的一个很好的示例。

使用哪个框架的问题有很多决策点:

速度测试:

这些是我考虑的框架

我决定将我的框架选择限制为

  1. Dojo :Toolkit,Desktop,Mobil,Graphics&矢量化
  2. YUI :开发人员工具,基础架构,工具,小工具,图库,项目
  3. jQuery :Core,UI,Mobil,插件,图形,可视化
  4. 但是......还需要对JavaScript LIBRARIES进行细分:
    MVC是最常用的前端模式。但是,我的笔记还没有完整。即使我在查找上面列出的项目的使用情况统计数据时也遇到了问题。

    Backbone.js (MVC)
    更倾向于使用REST数据。 Backbone有自己的事件系统,因此与jQuery功能竞争。

    Spine.js (MVC)

    JavaScriptMVC(MVC)
    MVC集成开发工具;与jQuery一起使用;高度模块化。还不确定它是否可以简单地被认为是一个图书馆......但爸爸喜欢!

    AngularJS(MVC)
    关注点分离,松散耦合和控制反转。双向数据绑定

    SproutCore (MVC)

    YUILibrary (MVC)
    这实际上是整个YUI框架的一部分......但是在原source article中列出了。

    Broke.js (MVC)
    文档目前很差。

    Fidel.js (MVC)

    Sammy.js (MVC)
    更倾向于使用REST数据。

    KnockoutJS (MVVM)

    问题:

    • 为什么没有那么少的直接MVVM实现?
    • 双向绑定与MVVM相同吗?
    • 如果是这样,为什么其中一些库(做双向绑定)认为自己是MVC?

    模块化JAVASCRIPT: AMDCommonJS 和基于Promise的实现
    我仍在概述这个领域。但是,以下是我正在使用的一些领域。

    问题:

    • 是否有不同的口味' AMD(各种文章似乎都说是)?
    • 基于承诺的内容'意思?

    创建WIDGETS&插件:
    一旦你决定你的模块应该使用哪种AMD版本,你就可以开始写一些东西了。

    问题:

    • 插件和小部件有什么区别?

    一般说明:
    我建议看一下你的每个框架如何实现各种模块。看看完成某些事情所需的代码。感觉对吗?感觉笨重吗?

    我的初始感觉: 观察社区支持选项的趋势,使用,速度和广泛性...... jQuery领先一步。

    目标:
    最终目标是选择一个框架,任何/所有库,并定义一个加载和创建松散耦合的JavaScript模块的通用方法。

    按风险量化成本:
    直接量化成本很难,但你可以解释风险。在您最后的决定中,您还应该考虑上面列出的趋势。但是,总的来说,我会将成本分散到3个定义风险的领域:

    • 熟悉:您的团队现在最熟悉的是什么?
    • 加速:获得"加速"需要多少额外的努力?在每个框架和库?
    • 许可:这里有任何障碍吗?

    风险:经过评估,您可以正确地解释为什么您可以将一个选项排列为低,中或高。

    <强> @ErezCohen

    我们是一家ASP.NET商店,因此我们将REST API用于RESTFUL后端。由于组件式JavaScript开发是未来,我们选择使用jQuery&amp; RequireJS作为我们所有页面的标准基线。此外,我们在控制器中大量使用Deferred。

    至于客户端MVC,提到的太多“框架”比其他任何东西都更加流行(许多人已经在使用中衰落)。此外,当需求决定而不是标准时,将MVC / MVVM功能视为一次性附加组件更有意义。而且,坦率地说,既然我们发现使Ajax调用变得容易,那么简单的数据绑定就会变得愚蠢(对于某些复杂的情况,唯一真正的好处是双向绑定)。此外,想想一旦这些框架不再流行,将这些框架分离出来会带来多大的痛苦。

    当然,我们有自己的才能......你可能不会。如果您的工作人员对JavaScript不是很好,请尝试使用Angular,因为它是为“设计人员”而非程序员开发的。或者,如果您的团队能够自己滚动并想要一个控制器框架,那么jQuery Widget Factory非常有用。但是,为控制器简单地使用模块模式也很好(这就是我们所做的)。并且...它很有效......并且非常干净。