Un tema ricorrente nel mio lavoro di sviluppo è stato l'uso o la creazione di un'architettura plug-in interna. Ho visto che si è avvicinato in molti modi: file di configurazione (XML, .conf e così via), framework di ereditarietà, informazioni sul database, librerie e altro. Nella mia esperienza:
- Un database non è il luogo ideale per archiviare le informazioni di configurazione, in particolare combinate con i dati
- Tentare questo con una gerarchia di ereditarietà richiede la conoscenza dei plug-in da codificare, il che significa che l'architettura dei plug-in non è poi così dinamica
- I file di configurazione funzionano bene per fornire informazioni semplici, ma non sono in grado di gestire comportamenti più complessi
- Le biblioteche sembrano funzionare bene, ma le dipendenze a senso unico devono essere create con cura.
Mentre cerco di imparare dalle varie architetture con cui ho lavorato, cerco anche suggerimenti per la comunità. Come hai implementato un'architettura plug-in SOLID? Qual è stato il tuo peggior fallimento (o il peggior fallimento che hai visto)? Cosa faresti se avessi implementato una nuova architettura plug-in? Quale SDK o progetto open source con cui hai lavorato ha il miglior esempio di buona architettura?
Alcuni esempi che ho trovato da solo:
- Modulo Perl :: Plugable e IOC per iniezione di dipendenza in Perl
- I vari framework Spring (Java, .NET, Python) per l'iniezione delle dipendenze.
- Una domanda SO con un elenco per Java (comprese le interfacce del provider di servizi )
- Una domanda SO per C ++ che punta a un articolo del Dr. Dobbs
- Una domanda SO riguardante un'idea specifica del plugin per ASP.NET MVC
Questi esempi sembrano giocare a vari punti di forza linguistici. Una buona architettura di plugin è necessariamente legata alla lingua? È meglio usare gli strumenti per creare un'architettura plug-in o per farlo sui propri modelli seguenti?