Magento tiene un sistema Event / Observer bastante bien implementado, pero antes de profundizar en los detalles, asegurémonos de que comprendemos claramente los patrones de diseño que están en juego en la aplicación Magento..
Específicamente, hablemos sobre el concepto del sistema de eventos, cómo funciona y qué es. Aunque hemos cubierto ciertos patrones de diseño en otros artículos sobre Tuts +, no lo hemos hecho en el contexto de Magento..
Con ese fin, echemos un vistazo al patrón para obtener una comprensión clara de cómo es, cómo funciona y cómo es beneficioso..
A lo largo de los años se ha desarrollado una amplia gama de patrones de diseño. Pero que es un patrón de diseño exactamente?
Para citar Wikpedia:
"En la ingeniería de software, un patrón de diseño es una solución general reutilizable a un problema común dentro de un contexto dado en el diseño de software".
Si lo reducimos un poco, nos quedamos con: un patrón de diseño es una solución reutilizable para un problema común. Esa es una descripción tan perfecta..
El patrón de diseño es una plantilla que se puede utilizar para crear una solución que se ajuste a problemas de la misma naturaleza. El patrón en sí no es la solución real, define la forma en que la solución se puede implementar como una guía.
Su solución real, incluso si seguir el patrón definido puede ser diferente al mío, siempre y cuando ambos sigan las pautas establecidas por el patrón de diseño..
Ahora que sabemos lo que realmente es un patrón de diseño, echemos un vistazo al patrón de observador.
Implementado por primera vez en la arquitectura MVC, el patrón Observer ha resultado ser una adición muy valiosa a la arquitectura. En parte debido a esto, una enorme cantidad de bibliotecas han implementado el patrón a lo largo del tiempo y si ha estado programando por un tiempo, no es poco probable que ya lo haya usado.
Sin embargo, suficiente historia ahora, echemos un vistazo a cómo funciona.
Observar algo es mirarlo, o observar su estado. En un contexto técnico, esto no es diferente. Los observadores por definición están viendo algo y en nuestro caso, los eventos. La idea aquí es que si un evento se despacha, los observadores que están observando este evento se ejecutan.
En general, el sujeto que se está observando se pasará por referencia para que el observador pueda actualizarlo o verificarlo en busca de cambios..
Echa un vistazo a este ejemplo junto con el código de Magento:
la clase Mage_Catalog_Model_Product extiende Mage_Catalog_Model_Abstract public function validate () Mage :: dispatchEvent ('catalog_product_validate_before', array ('product' => $ this)); $ this -> _ getResource () -> validate ($ this); Mage :: dispatchEvent ('catalog_product_validate_after', array ('product' => $ this)); devuelve $ esto;
Muy bien, este es el método de validación, ya que está disponible en su ejecución de la instalación de Magento mill. Para mayor claridad reemplacé dos variables con sus valores reales. Puedes ver dos eventos enviados aquí.. catalog_product_validate_before
y catalog_product_validate_after
, Cada uno de estos proporciona el objeto del producto junto con el envío para que el observador pueda hacer algo con él..
la clase Enterprise_AdminGws_Model_Models extiende Enterprise_AdminGws_Model_Observer_Abstract public function catalogProductValidateAfter (Varien_Event_Observer $ observer) if ($ this -> _ role-> getIsAll ()) return; $ producto = $ observador-> getEvent () -> getProduct (); $ this -> _ forceAssignToWebsite ($ product-> getWebsiteIds ());
Y aquí hay una clase de observador y su método. Esta clase y este método se conectan al sistema mediante el sistema de configuración de Magento. El evento en sí se entrega a la clase de observador y se puede acceder al producto desde el evento.
Cubriré la creación y el enlace reales de los observadores, así como los temas con más detalle en la próxima publicación..
Uno de los argumentos principales para usar el patrón de observador, o sus parientes cercanos como el patrón de pub / sub es la modularidad que proporciona.
Debido a que cualquier cosa puede engancharse a un evento que se está enviando, nunca tiene una referencia fuerte a él. Esto es excepcionalmente útil en una configuración en la que siempre está trabajando con módulos que pueden o no proporcionar servicios a un elemento específico que puede o no estar disponible..
Para usar Magento de nuevo, puedo crear un módulo que observe los cambios en el producto, así como un módulo que construí que dispara sus propios eventos personalizados. Ahora, en un sistema regular, este módulo dependería del módulo anterior, pero al usar un Pub / Sub o el Patrón de observador, puedo hacer que la dependencia sea opcional y solo aplicarle el módulo actual cuando esté disponible..
Después de este rápido repaso de qué son exactamente los patrones de diseño y de la mirada más profunda del Observer Pattern, en la próxima publicación explicaré cómo se usa en Magento, cómo puede comenzar a usarlo en sus propios módulos y proporcionarlos. en sus propios módulos también para enganchar desde diferentes, o para que otros enganchen en.