Comprendre les observateurs de Magento

Magento a un système Event / Observer assez bien implémenté, mais avant d'entrer dans les détails, assurons-nous d'avoir une compréhension claire des modèles de conception en jeu dans l'application Magento..

Plus précisément, parlons du concept du système d’événements, de son fonctionnement et de ce qu’il est. Bien que nous ayons couvert certains modèles de conception dans d'autres articles sur Tuts +, nous ne l'avons pas fait dans le contexte de Magento.. 

Pour ce faire, examinons le modèle afin de bien comprendre son fonctionnement, son fonctionnement et ses avantages..

Modèles de conception dans leur ensemble

Au fil des ans, un large éventail de modèles de conception ont été développés. Mais quoi est un motif de conception exactement?

Pour citer Wikpedia:

«En génie logiciel, un modèle de conception est une solution générale réutilisable à un problème commun dans un contexte donné de conception de logiciel.»

Si nous réduisons un peu ce qui nous reste: un modèle de conception est une solution réutilisable à un problème courant. C'est une description aussi parfaite. 

Le modèle de conception est un modèle qui peut être utilisé pour créer une solution adaptée à des problèmes de même nature. Le modèle en lui-même n'est pas la solution réelle, il définit la manière dont la solution peut être mise en œuvre à titre indicatif.. 

Votre solution actuelle, même si vous respectez le modèle défini, peut être différente de la mienne, à condition que les deux respectent les directives définies par le modèle de conception..

Le modèle d'observateur

Maintenant que nous savons ce qu’est vraiment un motif, jetons un coup d’œil au motif Observer..

D'abord implémenté dans l'architecture MVC, Observer Pattern s'est avéré un ajout très précieux à l'architecture. En partie à cause de cela, un nombre énorme de bibliothèques ont implémenté le modèle au fil du temps et si vous programmez depuis un moment, il n'est pas improbable que vous l'ayez déjà utilisé..

Assez d'histoire, voyons maintenant comment cela fonctionne..

Observer quelque chose, c'est l'observer ou observer son état. Dans un contexte technique, ce n'est pas différent. Les observateurs, par définition, observent quelque chose et, dans notre cas, des événements. L’idée ici est que si un événement est envoyé, les observateurs qui l’observent sont exécutés. 

En règle générale, le sujet observé est transmis par référence afin que l'observateur puisse le mettre à jour ou le rechercher..

Découvrez cet exemple mis en place à partir du code Magento:

classe Mage_Catalog_Model_Product étend Mage_Catalog_Model_Abstract fonction publique validate () Mage :: dispatchEvent ('catalog_product_validate_before', array ('product' => $ this)); $ this -> _ getResource () -> validate ($ this); Mage :: dispatchEvent ('catalog_product_validate_after', array ('product' => $ this)); return $ this; 

Bon, c'est donc la méthode validate telle qu'elle est disponible dans votre installation Magento de série. Pour plus de clarté, j'ai remplacé deux variables par leurs valeurs réelles. Vous pouvez voir que deux événements sont distribués ici. catalog_product_validate_before et catalog_product_validate_after, chacun de ceux-ci donne l'objet produit avec l'envoi afin que l'observateur puisse en faire quelque chose.

la classe Enterprise_AdminGws_Model_Models étend Enterprise_AdminGws_Model_Observer_Abstract fonction publique catalogProductValidateAfter (Varien_Event_Observer $ observateur) if ($ this -> _ role-> getIsAll ()) (return);  $ product = $ observ-> getEvent () -> getProduct (); $ this -> _ forceAssignToWebsite ($ product-> getWebsiteIds ()); 

Et voici une classe d'observateur et sa méthode. Cette classe et cette méthode sont connectées au système à l'aide du système de configuration de Magento. L'événement lui-même est remis à la classe d'observateurs et le produit est accessible depuis l'événement..

Je couvrirai la création et l'accouplement réels des observateurs, ainsi que les sujets abordés avec plus de détails dans le prochain article..

Pourquoi utiliser ce modèle?

L'un des principaux arguments en faveur de l'utilisation du motif Observer, ou de ses proches parents comme le motif Pub / Sub, est la modularité fournie..

Parce que tout peut s’accrocher à un événement en cours d’envoi, vous n’avez jamais une référence forte à cet événement. Ceci est particulièrement utile dans un environnement où vous travaillez toujours avec des modules qui peuvent ou non fournir des services à un élément spécifique qui peut ou non être disponible.. 

Pour utiliser Magento à nouveau, je peux construire un module qui observera les modifications apportées au produit, ainsi qu'un module que j'ai construit et qui déclenchera ses propres événements personnalisés. Maintenant, dans un système classique, ce module dépendrait du module précédent, mais en utilisant un modèle Pub / Sub ou Observer, je peux rendre cette dépendance facultative et ne lui appliquer que le module actuel, le cas échéant..

Et après?

Après ce bref rappel sur les modèles de conception et l'examen approfondi du modèle Observer, nous expliquerons dans le prochain article comment il est utilisé dans Magento, comment commencer à l'utiliser dans vos propres modules et les fournir. dans vos propres modules aussi bien pour accrocher de différents, ou pour les autres pour accrocher dans.