2009-10-14 19 views
1

J'ai écrit une application JavaScript qui s'exécute Prototype & Scriptaculous. J'envisage de le déployer en tant que produit open source & aimerait pouvoir aussi fonctionner sur jQuery - j'utilise généralement jQuery pour la plupart de mes autres applications, à l'exception du site pour lequel cette application a été conçue. Je pensais à l'origine à la construction de deux applications distinctes, mais leur maintenance prendrait du temps. Au lieu de cela, je considère la construction d'une couche d'abstraction de bibliothèque qui détecte si la page exécute jQuery ou Prototype, puis appelle les méthodes appropriées. Je ne vais pas résumer l'ensemble des bibliothèques, juste la fonctionnalité applicable à mon application - à savoir les sélecteurs, les événements & effet. Le cœur de mon application contient moins de 500 lignes de code, il n'y a donc pas grand chose à craindre.Écrire une abstraction d'abstraction JavaScript - est-ce sain d'esprit?

Ainsi, au lieu d'appeler $('id') je qualifierais LA.$('id') (LA pour la bibliothèque d'abstraction) qui remettrait $('id') en prototype et $('#id') dans la requête etc & hellip;

Est-ce que cela vous semble raisonnable? Je ne peux pas penser à des obstacles techniques, même si je m'attendais à ce que quelqu'un l'ait déjà essayé. Je n'ai rien trouvé de similaire dans mes recherches.

Répondre

3

Je prévois que si vous ne prenez en charge les bibliothèques qu'en partie, personne ne choisira de l'utiliser, car elles devront terminer le support, et vous trouverez peut-être que le maintenir sera un casse-tête, car il y aura des demandes ajouter plus de fonctionnalités.

Si votre application est trop petite, pourquoi ne pas simplement passer à jQuery pour cela, et standardiser cela, comme MS l'a fait. Vous pouvez rencontrer des problèmes avec les versions, car si quelqu'un l'utilise et utilise une ancienne version d'une bibliothèque, et il y a eu quelques changements d'API, alors ils voudront que vous ajoutiez le support pour cette bibliothèque.

+0

Mon intention est simplement de faire fonctionner mon application principale sur les deux bibliothèques, pas nécessairement de produire un abstracteur de bibliothèque complet que d'autres peuvent utiliser. Malheureusement, je ne peux pas passer l'application à jQuery car je dois l'utiliser sur une application beaucoup plus grande qui est fixée sur Prototype. J'ai commencé à coder une solution et elle semble fonctionner (bien que quelque peu obscurcie la base de code). Je posterai le code et les expériences de mon abstraction ici quand c'est fait. – zemaj

+1

@zemaj - Si vous envisagez de le publier en open-source, vous obtiendrez des demandes de prise en charge complète des bibliothèques, ce qui est une perte de temps. Il suffit de déployer pour Prototype, et ne vous inquiétez pas pour jQuery. –

0

Je crois que Ext.Js fait quelque chose de similaire. Ils ont un concept d '"adaptateurs" qui vous permettent de placer Ext.JS au-dessus de n'importe laquelle des bibliothèques sous-jacentes et cela fonctionnera simplement. La principale différence est qu'ils utilisent un modèle 1-à-1 où vous dites quelle bibliothèque vous voulez utiliser et où il joint les points, alors que je crois que vous essayez de dire «Je ne sais pas lequel sera disponible» mais quoi que tu trouves, va l'utiliser ".

Je ne pense pas que ce soit fou, mais vous pourriez avoir du plaisir à essayer quelle bibliothèque utiliser, en particulier si les deux sont disponibles.

0

Les frameworks de développement Web (Prototype, jQuery, etc.) eux-mêmes sont conçus pour être des abstractions au-dessus des différents navigateurs existants. Vous demandez au framework de faire une chose et il a le même résultat (idéalement) quel que soit le navigateur. Donc, ici, vous proposez une abstraction au-dessus des abstractions. Vraisemblablement parce que vous voulez que les gens puissent utiliser votre outil quel que soit le framework qu'ils ont choisi pour leur site. Bien que cela semble une idée intéressante, je devrais personnellement deviner que cela ne fonctionnerait pas à long terme. Largement parce que vous ne savez pas ce que l'avenir nous réserve. Le prototype était le framework d'utilisation numéro un, maintenant jQuery l'a dépassé. Peut-être qu'un autre sera très populaire en un an, et si vous voulez soutenir ce cadre? Cela peut être beaucoup de code conditionnel que vous avez à ajouter, et en plus, force d'être chargé dans les navigateurs de ceux qui utilisent votre outil.

Je dis soit choisir un seul framework pour supporter et coller avec, soit maintenir des bibliothèques séparées. Idéalement, ce serait vraiment cool si vous pouviez écrire une sorte de script builder.Cela vous permettrait de définir des règles de structure dans certaines listes et le script créerait des scripts distincts pour chaque framework en fonction d'un script de base et de la liste des règles. Honnêtement, je ne suis pas sûr de la meilleure façon d'accomplir quelque chose comme ça, mais cela vous donnerait effectivement cette abstraction sur le pouvoir d'abstraction que vous recherchez sans que cela soit visible par l'utilisateur final.