Domanda

Non cerco tanto risposte specifiche per la lingua, solo modelli generali per implementare un sistema di plugin (se vuoi saperlo, sto usando Python).Ho la mia idea (registrare le richiamate e questo è tutto), ma so che ne esistono altre.Cosa viene utilizzato normalmente e cos'altro è ragionevole?

Cosa intendi per sistema di plugin?I contenitori Dependency Injection e IOC sembrano una buona soluzione?

Intendo, beh, un modo per inserire funzionalità nel programma base senza alterarlo.Non avevo intenzione di definirlo quando ho iniziato.L'iniezione di dipendenza no Aspetto particolarmente adatti per quello che sto facendo, ma non ne so molto.

È stato utile?

Soluzione

C'è molto bene episodio Di Radio di ingegneria del software, che potrebbe interessarti.

Per riferimento futuro, ho riprodotto qui il "Regole per gli abilitatori" (collegamento alternativo) dato in ottimo Contribuire a Eclipse di Erich Gamma, Kent Beck.

  • Regola dell'invito: quando possibile, lascia che altri contribuiscano ai tuoi contributi.
  • Regola di caricamento lento: i contributi vengono caricati solo quando sono necessari.
  • Regola della piattaforma sicura: in qualità di fornitore di un punto di estensione, devi proteggerti da comportamenti scorretti da parte degli estensori.
  • Regola del fair play: tutti i clienti giocano secondo le stesse regole, anche io.
  • Regola di estensione esplicita: dichiara esplicitamente dove una piattaforma può essere estesa.
  • Regola della diversità: i punti di estensione accettano più estensioni.
  • Buona regola di recinzione: quando passi il controllo al di fuori del tuo codice, proteggiti.
  • Regola API esplicita: separa l'API dagli elementi interni.
  • Regola di stabilità: una volta invitato qualcuno a contribuire, non modificare le regole.
  • Regola API difensiva: rivela solo l'API di cui sei sicuro, ma preparati a rivelare altre API quando i clienti lo richiedono.

Altri suggerimenti

Una semplice architettura di plugin può definire un'interfaccia di plugin con tutti i metodi che il plugin dovrebbe implementare.Il plugin gestisce gli eventi dell'applicazione e può utilizzare il codice standard dell'applicazione, gli oggetti del modello, ecc.per portare a termine le cose.Fondamentalmente è uguale a un modulo ASP.NET, tranne per il fatto che si esegue l'override anziché l'implementazione.

Nessuno mi ha insegnato questa parte e non sono un esperto, ma sento che:In generale un plugin sarà meno stabile della sua applicazione, quindi l'applicazione dovrebbe avere sempre il controllo e dare al plugin solo opportunità periodiche di agire.Se un plugin può registrare un osservatore, le chiamate al delegato dovrebbero essere provate/intercettate.

In Python puoi utilizzare il sistema di entry-point fornito da setuptools E pkg_resources.Ogni punto di ingresso dovrebbe essere una funzione che restituisce informazioni sul plugin: nome, autore, funzioni di installazione e smontaggio, ecc.

Che ne dite di fabbrica astratta?Il tuo programma di base definisce come i concetti astratti interagiscono tra loro, ma il chiamante deve fornire l'implementazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top