Un thème récurrent dans mon travail de développement a été l'utilisation ou la création d'une architecture plug-in en interne. Je l'ai vu abordé de nombreuses manières - fichiers de configuration (XML, .conf, etc.), cadres d'héritage, informations de base de données, bibliothèques, etc. Dans mon expérience:
- Une base de données n'est pas un bon endroit pour stocker vos informations de configuration, en particulier mélangées avec des données
- Tenter cela avec une hiérarchie d'héritage nécessite des connaissances sur les plug-ins à coder, ce qui signifie que l'architecture des plug-ins n'est pas si dynamique
- Les fichiers de configuration fonctionnent bien pour fournir des informations simples, mais ne peuvent pas gérer des comportements plus complexes
- Les bibliothèques semblent bien fonctionner, mais les dépendances unidirectionnelles doivent être soigneusement créées.
Alors que je cherche à apprendre des différentes architectures avec lesquelles j'ai travaillé, je me tourne également vers la communauté pour des suggestions. Comment avez-vous implémenté une architecture de plug-in SOLID? Quel a été votre pire échec (ou le pire échec que vous ayez vu)? Que feriez-vous si vous deviez implémenter une nouvelle architecture de plug-ins? Quel SDK ou projet open source avec lequel vous avez travaillé a le meilleur exemple d'une bonne architecture?
Quelques exemples que j'ai trouvés par moi-même:
- Module de Perl :: Plugable et IOC pour l'injection de dépendances en Perl
- Les différents frameworks Spring (Java, .NET, Python) pour l'injection de dépendances.
- Une question SO avec une liste pour Java (y compris les interfaces de fournisseur de services )
- Une question SO pour C ++ pointant vers un article de Dr. Dobbs
- Une question SO concernant une idée de plugin spécifique pour ASP.NET MVC
Ces exemples semblent jouer sur diverses forces linguistiques. Une bonne architecture de plugin est-elle nécessairement liée au langage? Est-il préférable d'utiliser des outils pour créer une architecture de plugin, ou de le faire sur ses propres modèles suivants?