principios - Patrón de diseño para implementar complementos en aplicaciones PHP
php lazaro (6)
Bueno, hay un enlace al proyecto llamado jin-plugin en el artículo de Wikipedia sobre el concepto de complementos . También estoy viendo este marco por primera vez, pero, tal vez, puedes usarlo de inmediato.
Además, debes buscar en Google para cosas como "Patrón de complemento", solo hay dos enlaces que encontré en la primera página: Patrón de complemento, Patrón de extensibilidad (wikipedia) .
Si se trata realmente de un patrón, debe ser independiente del idioma, por lo que puede tomar con seguridad cualquier solución existente de cualquier idioma y convertirla a PHP.
PD. Gracias por la pregunta, de todos modos, sí despertaste mi interés en este tema. ;)
¿Existe un consenso sobre cómo deberían implementarse los complementos en una aplicación PHP?
He analizado el patrón de observadores que se acerca, en realidad es solo un sistema de notificación y no permite que el código amplíe la aplicación directamente. Actualmente estoy usando un sistema de gancho simple que se me ocurrió:
public function registerHook($hookName, array $params = array())
{
$this->hooks[] = $hookName;
foreach ( $this->plugins as $pluginName => $hooks ) {
if ( in_array($hookName, $hooks) ) {
$plugin = new $pluginName($this, $this->view, $this->controller);
$plugin->{$hookName}($params);
}
}
}
Esto funciona bien para mis propósitos, pero tengo curiosidad si hay un patrón de diseño que ha sido probado y probado muchas veces y estoy reinventando la rueda.
Creo que Events Dispatcher es una forma agradable y limpia de implementar complementos o cualquier extensión para ese asunto. An Events Dispatcher es una implementación del patrón Observer, y se está utilizando en Symfony, Symfony2 y Zend Framework 2 (beta).
Mirar a través de cualquiera de esa fuente en github será una lectura interesante. Sin embargo, se puede encontrar una información interesante aquí:
http://components.symfony-project.org/event-dispatcher/trunk/book/02-Recipes
Hace unos años, escribí una clase de Eventos y ganchos para un proyecto. Lo publicaré aquí si puedo encontrarlo.
Eche un vistazo al framework Yii. Yii depende en gran medida de eventos que son mucho más limpios que los enganches, las acciones, etc. Al usar eventos, puede permitir que diferentes partes del sistema hablen entre sí de una manera orientada a objetos.
La forma en que has hecho esto, con ganchos es también la forma en que implemento esto.
El mayor problema con su muestra, sin embargo, es que su función crea una instancia del complemento. ¿Por qué no pasar una instancia del complemento en su lugar?
La forma en que he hecho esto, es que primero se crea una instancia de un complemento y se registra a sí mismo.
No hay consenso como en el sentido de Silver Bullet. Para patrones establecidos, tiene múltiples opciones como
para nombrar unos pocos.
Lo que usa depende de usted, pero debe asegurarse de que la arquitectura de su sistema sea compatible con la modularidad. Eche un vistazo a estas diapositivas para algunas ideas
Zend Framework está utilizando los enganches dispatchLoopStartup () y dispatchLoopShutdown () como métodos de clase. Cada complemento es una clase que implementa los métodos antes mencionados.