我编写了一个运行Prototype& Scriptaculous的。我正在考虑将其作为一个开源产品推出。我希望它能够在jQuery上运行 - 我通常在我的大多数其他应用程序中使用jQuery,除了这个应用程序最初构建的站点。
我原本打算构建两个独立的应用程序,但维护它们会非常耗时。相反,我正在考虑构建一个库抽象层,用于检测页面是否正在运行jQuery或Prototype,然后调用相应的方法。我不会抽象整个库,只是适用于我的应用程序的功能 - 即选择器,事件和放大器。影响。我的应用程序的核心是500行代码,所以我不必担心太多。
所以我没有打电话给$('id')
,而是打电话给LA.$('id')
(LA for Library Abstraction),它会在原型中调用$('id')
,在查询中调用$('#id')
等等。
这听起来有道理吗?我想不出任何技术障碍,虽然我本来以为有人曾尝试过这个。我在搜索中找不到类似的内容。
答案 0 :(得分:3)
我希望如果你只支持部分库,那么没有人会选择使用它,因为他们必须完成支持,你可能会发现维护它会很头疼,因为会有添加请求更多功能。
如果您的应用程序太小,为什么不直接切换到jQuery,并按照MS的标准进行标准化。
您可能会遇到版本问题,因为如果有人使用它,并且他们使用的是旧版本的库,并且有一些API更改,那么他们会希望您添加对该库的支持。< / p>
答案 1 :(得分:0)
我相信Ext.Js做了类似的事情。他们有一个“适配器”的概念,它允许你将Ext.JS放在任何底层库的顶部,它就可以工作了。关键的区别在于他们使用的是一对一的模型,你说你想要使用哪个库并且它加入点,而我相信你试图说“我不知道哪一个可用但无论你找到什么,都去使用它。“
我认为这不是疯了,但你可能会尝试找出要使用哪个库的乐趣,特别是如果两者都可用的话。
答案 2 :(得分:0)
Web开发框架(Prototype,jQuery等)本身被设计为在各种浏览器之上的抽象。你要求框架做一件事,无论浏览器如何,它都有相同的结果(理想情况下)。所以,在这里,你提出了抽象之上的抽象。大概是因为您希望人们能够使用您的工具,无论他们为他们的网站选择了什么框架。虽然这听起来像一个有趣的想法,但我个人不得不猜测从长远来看它不会有用。很大程度上是因为你不知道未来会怎样。原型曾经是头号使用框架,现在jQuery已经超越了它。也许另一个将在一年内非常受欢迎,如果您想支持该框架怎么办?这可能是您必须添加的许多条件代码,此外,强制被加载到使用您的工具的浏览器中。
我说要么选择一个框架来支持并坚持使用它,要么维护单独的库。理想情况下,如果您可以编写某种构建器脚本,那将非常酷。这将允许您在某个列表中设置框架规则,并且脚本将基于某些核心脚本和规则列表为每个框架构建单独的脚本。老实说,我不确定如何最好地完成这样的事情,但它会有效地为你提供你正在寻找的抽象能力的抽象,而不会让最终用户看到它。