Un même thème dans mon travail de développement a été l'utilisation ou la création d'une maison d'architecture de plug-in. Je l'ai vu il approcha de nombreuses façons de fichiers de configuration (XML, .conf, et ainsi de suite), l'héritage des cadres, des informations de base de données, bibliothèques, et autres. Dans mon expérience:
- Une base de données n'est pas un endroit idéal pour stocker vos informations de configuration, en particulier co-mêle avec les données
- D'essayer cela avec une hiérarchie d'héritage exige la connaissance sur les plugins être codés dans, sens de l'architecture de plug-in n'est pas dynamique
- Les fichiers de Configuration de travail bien pour fournir des informations simples, mais ne peut pas gérer les comportements les plus complexes
- Les bibliothèques semblent bien fonctionner, mais les dépendances doivent être soigneusement créé.
Comme je cherche à apprendre les différentes architectures qui j'ai travaillé, je suis également à la recherche de la communauté pour des suggestions. Comment avez-vous mis en place un solide architecture de plug-in? Quel a été votre pire échec (ou le pire cas d'échec, vous l'avez vu)? Que feriez-vous si vous alliez mettre en œuvre une nouvelle architecture de plug-in? Ce SDK ou un projet open source qui vous avez travaillé avec de a le meilleur exemple d'une bonne architecture?
Quelques exemples que j'ai trouvé sur mon propre:
- Perl Module::Plugable et du CIO pour l'injection de dépendances en Perl
- Les différentes Printemps cadres (Java, .NET, Python) pour l'injection de dépendances.
- Une SORTE de question avec une liste de Java (y compris Sever Interfaces du Fournisseur)
- Une SORTE de question pour C++ pointant vers un Dr Dobbs article
- Une SORTE de question au sujet d'un plugin spécifique pour l'idée ASP.NET MVC
Ces exemples semblent jouer à divers langue forces. Est une bonne architecture de plugin nécessairement lié à la langue? 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?