抽象JavaScript库的最佳方法是什么?

时间:2010-09-14 11:12:51

标签: javascript

抽象出任何给定的JavaScript框架(jQuery,MooTools等)的最佳方法是什么,它位于框架堆栈的底部?从本质上讲,我希望有一种情况可以换出库,只对框架的一层进行更改(例如,不对每个模块进行更改),整个过程可以重新启动并运行。

因此,每个模块都应调用一个框架函数,然后将其路由到库中。

4 个答案:

答案 0 :(得分:10)

您可能想要使用Adapter Pattern之类的内容。创建您自己的界面,公开您将在应用程序中使用的方法,然后为您想要支持的每个工具包(jQuery,MooTools,YUI等)创建一个适配器。然后,您自己的接口会将方法调用路由到特定的适配器。

如果您要支持新的工具包,那么您所要做的就是编写一个新的适配器,将方法从您自己的接口转换为特定工具包的方法。

这是Ext JS目前所做的事情。您可以选择在框架的方法调用后面使用哪个适配器(jQuery,YUI等)。例如:Ext.getCmp()在使用jQuery适配器时将使用jQuery.$()。但是,这通常不是一个简单的一对一映射。

  

Ext JS开始作为Yahoo UI javascript库的扩展。那时,Ext依赖于YUI的所有低级跨浏览器代码。现在Ext是一个独立的JavaScript库,您可以选择将YUI替换为其他JavaScript库,例如Prototype或jQuery。将低级Ext API映射到其他JavaScript库(或Ext自己的基本库)的源文件称为适配器,它们位于源/适配器子目录中。当您在网站中包含Ext时,您可以选择要使用的适配器。

     

来自:Ext JS Manual: Source Overview

答案 1 :(得分:6)

这将是为...库编写一个库,如果你完全关心性能(为什么不会你呢?)你应该完全采用不同的路径。使用非常不同方法的库顶部的另一个抽象层(特别是当你进入实用程序,动画等)时,非常低效且耗时。

不开玩笑,在构建(或更重要的是,维护)像这样的库抽象层之前,即使在任何体面的大小项目中,也需要花费很少的时间来移植代码。

答案 2 :(得分:3)

您必须为您可能想要用于框架的每个工具包/库编写适配器,就像ExtJS/Sencha已经完成的那样(尽管它们可能不可重复使用)。

首先绘制出你的适配器应该具有的方法,它将作为你的框架低级API。

下一步是为每个可能的工具包/库编写一个适配器。有些库很难为YUI编写适配器,因为它们会动态加载代码。您可能必须首先使用所需的功能编译单个.js文件。

添加新的工具包/库,根据您的映射编写新的适配器。

答案 3 :(得分:2)

如果框架具有相同的功能,这可能是一个合理的想法。不幸的是他们没有;他们做不同的事情,他们做的不同。它们之间有交叉,但你的包装器会错过很多,因为你只能对两者中的东西进行包装。你最终会得到最低的共同点;两个世界中最糟糕的。

我的建议是花时间学习两个库 - MooTools和JQuery都是非常好的库,并且很好地了解它们。即使你只在项目中使用其中一个,你至少可以在开始之前做出明智的选择。