Per una libreria Javascript, qual è il modo migliore o standard per supportare l'estensibilità

4

In particolare, voglio supportare "plugin" che modificano il comportamento di parti della libreria.

Non sono riuscito a trovare molte informazioni sul web su questo argomento. Ma ecco le mie idee su come una libreria potrebbe essere estensibile.

  1. La libreria esporta un oggetto con funzioni sia pubbliche che "protette". Un plugin può sostituire qualsiasi di queste funzioni, modificando così il comportamento della libreria. I vantaggi di questo metodo sono che è semplice e che le funzioni del plugin possono avere pieno accesso alle funzioni "protette" della libreria. Gli svantaggi sono che la libreria potrebbe essere più difficile da mantenere con un set più ampio di funzioni esposte e potrebbe essere difficile eseguire il debug se sono coinvolti più plugin (come sapere quale plugin ha modificato quale funzione?).

  2. La libreria fornisce una funzione "aggiungi plugin" che accetta un oggetto con un'interfaccia specifica. Internamente, la libreria utilizzerà il plug-in al posto del proprio codice, se appropriato. Con questo metodo, gli interni della libreria possono essere riorganizzati più liberamente purché supporti ancora la stessa interfaccia di plugin. Ciò potrebbe anche supportare l'uso di interfacce plugin diverse per modificare diverse parti della libreria. Uno svantaggio di questo metodo è che i plugin potrebbero dover implementare nuovamente il codice che è già parte della libreria poiché le funzioni interne della libreria non vengono esportate.

  3. La libreria fornisce una funzione "imposta implementazione" che accetta un oggetto ereditato da un oggetto base specifico. L'API pubblica della libreria chiama le funzioni nell'oggetto di implementazione per qualsiasi funzionalità che può essere modificata e l'oggetto di implementazione di base include la funzionalità di base, con funzioni esterne (all'API) e interne. Un plugin crea un nuovo oggetto di implementazione, che eredita dall'oggetto base e sostituisce qualsiasi funzione che desidera modificare. Questo combina vantaggi e svantaggi di entrambi gli altri metodi.

posta Michael Best 30.06.2012 - 02:39
fonte

2 risposte

2

Per me, Estensibilità significa Interchangable_Parts.

At a high-level: to be extensible, over time - some code must be added, and some code must be removed. Extensibility is a painless system to achieve: addition, reuse, and replacement - over time.

Per progettare sistemi estensibili, esistono prerequisiti fondamentali nella conoscenza di metodologie avanzate. Fortunatamente molti sono ben documentati in JavaScript.

Senza una conoscenza specifica di ciò che stai tentando ....

Ecco una breve lista:

  1. Modules - AMD.
  2. Design Patterns - MVC, Namespaces.
  3. Loose Coupling - Pub-Sub/Evented Views, App Architecture.
  4. Templates.
  5. Data-binding.

In molti modi, la gioia di imparare gli argomenti sopra diventa un'arte sopra una scienza.

Dovrai:

A. Research many options B. Prototype many technologies C. Become a JSpolyglot and JSagnostic. D. and Fail-Fast, when applying best-fit over personal ideology.

  • Fail-Fast si basa sul motto delle imprese tecnologiche per il successo. Questo è utile per realizzare software in evoluzione. Se il tuo software è modulare, puoi progettare di migliorare le parti separatamente. Non si vuole investire troppo sforzo su un modello in errore.

  • Elimina le cose che sai che puoi estendere in seguito e continua ad estenderle in modo iterativo. Ciò richiede una certa visione e disciplina.

  • Stai sulla spalla dei giganti. Non perdere tempo a cercare di reinventare la ruota. Usa ciò che la comunità di codifica sociale sta generando e approfondisci. Questo ti darà le migliori possibilità di modularità. E, la migliore possibilità di incorporare modelli di progettazione migliori pratiche.

  • Guarda cosa fanno gli altri riguardo ai plugin. Paul Irish ha alcuni documenti famosi relativi a "10 cose che ho imparato leggendo il codice sorgente di jQuery". Se vuoi scrivere plugin, dovresti farlo anche tu. Si dovrebbe anche guardare ExtJS e YUI, con giudizio riservato; i benefici derivano dall'essere agnostici. Ciascuno usa metodologie divergenti che possono aiutare a soddisfare le tue necessità.

  • Architettura modulare. Questa è la base per tutta la flessibilità. La più grande sfida, ho visto attraverso le lingue, è quella di disaccoppiare gli oggetti astratti, ma poi permetterli ancora di comunicare. Essenzialmente, questo è un trade-off non banale.

Ecco le tecnologie raccomandate per la separazione dei dubbi:

require.js, backbone.js, underscore.js, GitHub.

Ce ne sono facilmente altri mille. Ma se hai un solo take-away, è quello di guardare AMD e require.js. Molte persone dicono che questo è il futuro per JS modulare.

Speriamo che ci siano alcuni termini abbandonati qui che ti portano nella giusta direzione. Ti auguro il meglio! Nash

    
risposta data 30.06.2012 - 07:46
fonte
3

Questo è un argomento interessante che sembra similare al seguente post: Come estendere la libreria javascript tramite plugin? . Spero che il post risponda alla tua domanda.

Consiglierei inoltre di consultare Chiusure per nascondere le cose.

    
risposta data 30.06.2012 - 06:52
fonte

Leggi altre domande sui tag