Un tema recurrente en mi trabajo de desarrollo ha sido el uso o la creación de una arquitectura de plug-in interna. Lo he visto acercarse de muchas maneras: archivos de configuración (XML, .conf, etc.), marcos de herencia, información de bases de datos, bibliotecas y otros. En mi experiencia:
- Una base de datos no es un gran lugar para almacenar su información de configuración, especialmente combinada con datos
- Intentar esto con una jerarquía de herencia requiere conocimiento sobre los complementos a codificar, lo que significa que la arquitectura de complementos no es tan dinámica
- Los archivos de configuración funcionan bien para proporcionar información simple, pero no pueden manejar comportamientos más complejos
- Las bibliotecas parecen funcionar bien, pero las dependencias unidireccionales deben crearse cuidadosamente.
Mientras busco aprender de las diversas arquitecturas con las que he trabajado, también estoy buscando sugerencias en la comunidad. ¿Cómo ha implementado una arquitectura de complemento SOLID? ¿Cuál fue tu peor fracaso (o el peor fracaso que has visto)? ¿Qué haría si implementara una nueva arquitectura de plug-in? ¿Qué SDK o proyecto de código abierto con el que has trabajado tiene el mejor ejemplo de una buena arquitectura?
Algunos ejemplos que he encontrado por mi cuenta:
- Módulo de Perl :: Enchufable y COI para inyección de dependencia en Perl
- Los diversos frameworks Spring (Java, .NET, Python) para la inyección de dependencias.
- Una pregunta SO con una lista para Java (incluidas las interfaces de proveedor de servicios )
- Una pregunta SO para C ++ que apunta a un artículo del Dr. Dobbs
- Una pregunta SO con respecto a una idea de complemento específica para ASP.NET MVC
Estos ejemplos parecen jugar con varias fortalezas del lenguaje. ¿Una buena arquitectura de complementos está necesariamente vinculada al lenguaje? ¿Es mejor usar herramientas para crear una arquitectura de plugin, o hacerlo en los siguientes modelos?