Um tema recorrente em meu trabalho de desenvolvimento foi o uso ou a criação de uma arquitetura de plug-in interna. Eu já vi várias abordagens - arquivos de configuração (XML, .conf e assim por diante), estruturas de herança, informações de banco de dados, bibliotecas e outros. Em minha experiência:
- Um banco de dados não é um ótimo lugar para armazenar suas informações de configuração, especialmente combinadas com dados
- Tentar isso com uma hierarquia de herança exige que o conhecimento sobre os plug-ins seja codificado, o que significa que a arquitetura do plug-in não é tão dinâmica
- Os arquivos de configuração funcionam bem para fornecer informações simples, mas não podem lidar com comportamentos mais complexos
- As bibliotecas parecem funcionar bem, mas as dependências unidirecionais precisam ser criadas com cuidado.
Como procuro aprender com as várias arquiteturas com as quais trabalhei, também busco sugestões na comunidade. Como você implementou uma arquitetura de plug-in SOLID? Qual foi o seu pior fracasso (ou o pior fracasso que você já viu)? O que você faria se implementasse uma nova arquitetura de plug-in? Qual projeto de código aberto ou SDK com o qual você trabalhou tem o melhor exemplo de uma boa arquitetura?
Alguns exemplos que encontrei por conta própria:
- Módulo do Perl :: Plugable e IOC para injeção de dependência no Perl
- Os vários frameworks Spring (Java, .NET, Python) para injeção de dependência.
- Uma pergunta SO com uma lista para Java (incluindo interfaces de provedor de serviços )
- Uma pergunta SO para C ++ apontando para um artigo do Dr. Dobbs
- Uma pergunta SO referente a uma idéia específica de plug-in para o ASP.NET MVC
Esses exemplos parecem ter vários pontos fortes da linguagem. Uma boa arquitetura de plugins está necessariamente ligada ao idioma? É melhor usar ferramentas para criar uma arquitetura de plug-in ou fazê-lo por conta própria nos seguintes modelos?