Praticamente qualsiasi software che "vuole" essere esteso nel tempo, da più contributori che non sono strettamente collegati o coordinati, può trarre beneficio da un plug-in architettura di qualche tipo. Esempi comuni sono i sistemi operativi, strumenti CAD e GIS, strumenti di disegno e manipolazione delle immagini, editor di testo e elaboratori di testi, IDE, browser Web, sistemi di gestione dei contenuti Web e linguaggio di programmazione e framework. I plugin sono il cardine dei sistemi estensibili.
Tipicamente le architetture plug-in utilizzano digitazione anatra . L'architetto definisce un insieme comune di metodi (ad esempio open
, close
, play
, stop
, seek
, ecc.), Che ciascun plugin implementa (interamente o in parte). Alcuni metodi sono obbligatori, mentre altri possono essere facoltativi o utili solo in casi specifici.
Quando il programma principale viene eseguito inizialmente, controlla una o più "aree plugin" (come le directory ./plugins
conosciute) per l'esistenza dei plugin. Quelli trovati sono caricati nel programma.
Spesso i plug-in devono esistere al momento dell'esecuzione del programma principale. Il kernel Unix e il server Web Apache operano tipicamente in questo modo; devono essere riavviati per "vedere" e utilizzare nuovi plugin. I plugin possono essere più dinamici tuttavia; qui il programma principale ricontrolla periodicamente i plugin appena aggiunti o modificati (ad esempio confrontando un timestamp plugins-last-loaded
memorizzato con il timestamp "last modified" per una directory plugins). Il programma principale quindi (ri) caricherà i plug-in - tutti o tutti, nel caso semplice / ingenuo, o solo quelli nuovi / modificati, se è più sofisticato.
C'è spesso un requisito di "registrazione", con ogni plugin che non è solo codice, ma include anche alcuni metadati che comunica come il plugin si integra nel tutto. Ad esempio, potrebbe essere richiesto un plugin per lettore musicale per indicare quale tipo di file può riprodurre, quali architetture di processore può essere eseguito, quali risorse ha bisogno (ad esempio, quanta memoria deve essere allocata) e altri attributi necessari per il programma principale per decidere quale plugin utilizzare per riprodurre il file.
I meccanismi per la registrazione dei plugin, il caricamento e l'interazione con il programma principale sono abbastanza specifici per linguaggio e struttura. Perché c'è un sacco di "orchestrazione" in corso, con alcune funzioni gestite dal programma principale e alcuni dai suoi plugin (di cui ce ne potrebbero essere parecchi), l'impostazione di un programma per l'estensibilità richiede attenzione e considerazione e una vista architettonica del programma come "un sistema" piuttosto che "un singolo pezzo di codice".
La maggior parte dei progetti su larga scala avrà già scelto un framework di plugin o progettato proprio. Esistono anche numerosi framework di plugin generici progettati per semplificare la realizzazione del programma in un sistema estensibile.
(Risposta alla domanda 1) Sebbene i plug-in possano utilizzare le rispettive funzionalità, in genere lo fanno attraverso i metodi / API predefiniti che l'architetto ha predisposto. L'uso di tale "digitazione anatra" aiuta a evitare la super-interdipendenza, e significa che non è necessariamente chiaro se una determinata caratteristica sia fornita dal codice "core" o da un plugin. Infatti, avendo adottato una strategia di plug-in, molti sviluppatori implementano anche funzionalità "core" come plug-in, solo quelle che vengono fornite con il programma principale. Mentre avere grovigli di spaghetti di plugin non è l'ideale, non è raro vedere alcuni plug-in che richiedono l'esistenza di altri plug-in.
(Risposta alla domanda 2) Come architetto, la cosa principale che offri plugin è un'architettura - ad es. un insieme di metodi attraverso i quali sono impostati, registrati e invocati, e una progettazione e una serie di requisiti in cui i plug-in opereranno. Il programma principale, durante l'esecuzione, espone di solito molti se non tutte le sue strutture e metodi di dati interni ai plugin. Questa è ovviamente un'esposizione alla sicurezza. Un certo numero di tecniche sandboxing possono essere (e
vengono utilizzati sempre più spesso, ma il più delle volte i plugin sono codice "fidato", che funziona come
se fanno parte del programma principale.
Per ulteriori informazioni: