Come si dovrebbe realizzare un software pluggable?

20

Se hai un'applicazione di qualche tipo e vuoi che i tuoi utenti siano in grado di scrivere plugin per questo, come deve essere progettata l'applicazione?

Che cosa devi prendere in considerazione, quali sono gli schemi di progettazione per questo ecc.?

    
posta user9238 14.07.2011 - 12:50
fonte

3 risposte

13

Dipende dalla tua piattaforma, ma alcune cose generali da tenere a mente

Versioning Cosa succede se aggiorni la tua applicazione, tutti i vecchi plugin diventano obsoleti (il problema di Firefox)

isolamento I plugin possono fare tutto ciò che vogliono? Ti fidi sempre di loro? O hai bisogno di eseguirli in una sorta di sandbox e richiedere permessi.

Aggiornamenti Come gestisci gli aggiornamenti dei plugin?

Sicurezza Come si garantisce l'autore di un plug-in, si impedisce lo spoofing o l'utente viene ingannato nell'installazione di codice dannoso. Solitamente risolto con una sorta di firma del codice

serializzazione Spesso quando si utilizza l'isolamento di qualche tipo è necessario serializzare le informazioni tra diversi thread o processi. Come lo fai in modo più efficiente?

estensibilità Quali aspetti hai bisogno di estendere? Come massimizzare il potenziale dei plugin senza che l'API diventi ingombrante.

Se scegli come target gli sviluppatori di terze parti per i plugin, direi che la cosa più importante (dalla mia esperienza) è vedere il plugin api e le classi completamente diverse dal resto dell'applicazione, e renderlo facile sviluppare il più possibile. È molto semplice per l'architettura dall'app principale "riversarsi" nei plug-in in modo che gli autori dei plugin debbano imparare molto più del necessario. Rendila semplice per loro, pensa al tipo di interfaccia e all'esperienza che vorrai come autore di plugin.

Un'altra buona mentalità non è pensare come "Il plugin farà tutte queste cose (nel codice) ma piuttosto" il plugin deve fornire queste informazioni ". In questo modo l'applicazione può consumare le informazioni necessarie e fare l'elaborazione effettiva che semplificherà il plugin.

Inoltre, in generale, ogni volta che puoi adottare un approccio descrittivo (metadati, come xml) piuttosto che codice, hai un grande vantaggio in quanto i metadati sono più facili da trasportare, versione, distribuzione, sicurezza e possono essere configurati più facilmente da terze parti

    
risposta data 14.07.2011 - 13:25
fonte
9

Ho scritto questo articolo sul progetto di codice sull'utilizzo di MEF per l'estensibilità in .NET. È una buona introduzione.

Esistono altri framework di estensibilità per .NET, come Architettura di Add-in di SharpDevelop , Mono.Addins e System.AddIn .

Per Java, c'è Architettura plug-in di Eclipse .

Lo schema generale è questo:

  • Definisci un contratto (normalmente un'interfaccia) tra l'host e l'estensione
  • Hai bisogno di un meccanismo di scoperta che esca e cerchi le estensioni installate
  • Devi essere in grado di caricare dinamicamente le estensioni e renderne l'host a conoscenza

In pratica condivide parecchio con Dependency Injection e il Pattern della strategia.

    
risposta data 14.07.2011 - 13:45
fonte
3

Devi solo fornire un'interfaccia per i plugin.

Dovrebbe contenere almeno un Activate-Methode (un punto di ingresso), ma vorrete anche cose come Initialize ecc.

E dovrebbe esserci la possibilità di comunicare con l'applicazione host in modo simile al registro, ad esempio per registrare le voci di menu. Dovrebbero essere forniti registri per le cose che sono modificabili / estensibili per i plugin.

Inoltre, dovrebbe esserci spazio di archiviazione accessibile per i dati e gli oggetti dell'applicazione host, così i plugin possono chiamare le sue routine. Questo può essere fatto facilmente utilizzando un DI-Container come Unity e permettendo ai plug-in di accedervi, in modo che possano risolvere i servizi di cui hanno bisogno.

Un Event-Aggregator è probabilmente anche una buona idea, quindi i plugin possono lanciare eventi e reagire agli eventi di altri plugin e dell'applicazione host in modo disaccoppiato. Ne vuoi sicuramente uno!

    
risposta data 14.07.2011 - 13:14
fonte

Leggi altre domande sui tag