Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/11/2007, 14:00
Keysher
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Implementar sistema que admita plugins o módulos externos

Buenas,

Tengo algunas dudillas de concepto a la hora de crear una aplicación web que acepte plugins.

Lo que quiero es saber cual sería la forma más correcta de diseñar la aplicación.

Me explico, poniendo como ejemplo un CMS o un foro, o un sistema de blogs (o cualquier otra aplicación), ¿Cómo se implementaría que acepte diversos plugins o módulos externos?

Esos módulos podrían limitarse a realizar un par de operaciones, o interactuar con una base de datos, escribir ficheros, mostrar algo por pantalla, etc... Es decir, cualquier cosa.

Por ejemplo puede ser un plugin que se encargue de hacer una actualización de la base de datos sólo en el caso de que se den una serie de condiciones, o que implemente un formulario en un determinado lugar de la aplicación, etc..

El problema es que no tengo muy claro como implementarlo para que estos plugins puedan inyectarse en cualquier parte de la aplicación.

Lo que había pensado es, primero registrar los plugins/módulos externos (bien mediante un fichero de configuración, o poniendolos en un directorio concreto, o sacándolos de una BDD, etc...).
Al arrancar la aplicación lo que haría es cargar e inicializar los plugins (cada uno debe tener una función de inicialización).

Pero a partir de ahí no sé como hacer para que se inyecten en los sitios donde me interesan.

Había pensado en crear una especie de API para proveer las funciones más comunes, pero habrá muchas situaciones en las que estas se queden cortas.

Entonces estaba pensando una manera de poder inyectar funciones en cualquier parte del código. Lo primero que he pensado es en identificar una especie de "checkpoints" en determinados lugares del código, cada uno con un identificador único. De tal modo que, en esos lugares, se compruebe si tiene que ejecutar alguna función de algún plugin.

No sé si me habré explicado, no tengo mucha experiencia en aplicaciones de cierta embergadura (es por hobby).

Si alguien tiene alguna idea de cómo se podría implementar algo como lo que quiero le estaría muy agradacido!

Saludos!