Non abbiamo un'architettura di plugin in quanto tale, ma spiegherò come stiamo mantenendo il nostro codice client liberamente accoppiato, e forse ti darò alcune idee
Stiamo usando asp.net. Forniamo una pagina main.aspx che include per prima cosa un file javascript mediatore. Definisce un oggetto globale - chiamalo mediatore - che è l'unico oggetto globale che definiamo.
Il mediatore espone una semplice interfaccia con publish and subscribe messaggi:
mediator.subscribe(messageName, callback);
mediator.publish(messageName);
Dopo che il file mediator.js, la pagina principale comprende un certo numero di altri file JavaScript, ognuno dei quali è costituito da una funzione immediata che registra la sua funzionalità con il mediatore. È possibile trovare ulteriori informazioni su questo modello here o vedere una domanda precedente. here.
È possibile seguire un approccio simile: definire un singolo oggetto globale (ad esempio pluginFramework) che offra un'interfaccia per i plug-in per registrare le loro funzionalità. Quando si crea la pagina html da consegnare al client, includere prima il file pluginFramework e quindi includere dinamicamente i file di plug-in JavaScript desiderati, che potrebbero dipendere dall'utente o dal dispositivo (ad esempio plug-in diversi se il dispositivo è abilitato al tocco?). Questi file plugin aggiungerebbero la loro funzionalità a pluginFramework con una funzione immediata.
Ecco un esempio di come consentire i plugin per aggiungere funzionalità a un menu nell'interfaccia utente:
pluginFramework.js:
var pluginFramework = (function() {
var menuItems = [];
function addMenuItemPrivate(itemName, callback) {
// e.g. add itemName and callback to menuItems
}
return {
addMenuItem: addMenuItemPrivate;
}
})());
photoPlugin.js:
(function() {
function addPhoto() {
//...
}
pluginFramework.addMenuItem('add photo', addPhoto)
})());
Speranza questo era in qualche modo utile!
che tipo di funzionalità si desidera estendere con i plugin? Ho bisogno di qualche tipo di esempio per entrare in questo. – GarethOwen
1 esempio è come in WordPress, potrei estendere la funzionalità tramite widget e ganci. Un altro esempio potrebbe essere Tumblr. Potrebbe esserci il post di testo di base, quindi più tipi di post come Foto, Codice ecc. –
Chi prevedi di estendere? È una squadra interna, o c'è qualcuno su internet? L'app Web è molto specifica, ad es. un sistema di time card per freelance - o è generico, ad es. un sistema di gestione dei contenuti? –