Magento hat ein ziemlich gut implementiertes Event / Observer-System, aber bevor wir uns näher mit den Besonderheiten beschäftigen, sollten wir sicherstellen, dass wir ein klares Verständnis der Entwurfsmuster haben, die in der Magento-Anwendung verwendet werden.
Lassen Sie uns vor allem über das Konzept des Ereignissystems sprechen, wie es funktioniert und was es ist. Obwohl wir bereits in anderen Artikeln über Tuts + bestimmte Entwurfsmuster behandelt haben, haben wir dies im Rahmen von Magento nicht getan.
Sehen wir uns dazu das Muster an, um ein klares Verständnis darüber zu bekommen, wie es ist, wie es funktioniert und wie es von Vorteil ist.
Im Laufe der Jahre wurde eine Vielzahl von Designmustern entwickelt. Aber was ist genau ein Designmuster?
So zitieren Sie Wikpedia:
"In der Softwareentwicklung ist ein Entwurfsmuster eine allgemein wiederverwendbare Lösung für ein häufig auftretendes Problem in einem bestimmten Kontext des Softwareentwurfs."
Wenn wir das ein bisschen reduzieren, bleibt uns noch übrig: Ein Entwurfsmuster ist eine wiederverwendbare Lösung für ein allgemeines Problem. Das ist eine perfekte Beschreibung.
Das Entwurfsmuster ist eine Vorlage, mit der eine Lösung erstellt werden kann, die auf Probleme gleicher Art zutrifft. Das Muster selbst ist nicht die eigentliche Lösung, es definiert, wie die Lösung als Richtlinie implementiert werden kann.
Ihre tatsächliche Lösung, auch wenn das festgelegte Muster eingehalten wird, kann sich von meiner eigenen unterscheiden, sofern beide den Richtlinien des Designmusters folgen.
Nun, da wir wissen, was ein Designmuster wirklich ist, werfen wir einen Blick auf das Observer Pattern.
Das Observer Pattern wurde zuerst in der MVC-Architektur implementiert und erwies sich als sehr wertvolle Ergänzung der Architektur. Teilweise hat eine enorme Anzahl von Bibliotheken das Muster im Laufe der Zeit implementiert, und wenn Sie schon eine Weile programmieren, ist es nicht unwahrscheinlich, dass Sie es bereits verwendet haben.
Genug Geschichte jetzt, werfen wir einen Blick darauf, wie es funktioniert.
Etwas beobachten heißt, es betrachten oder seinen Zustand beobachten. Im technischen Kontext ist das nicht anders. Beobachter beobachten per Definition etwas und in unserem Fall Ereignisse. Die Idee hier ist, dass, wenn ein Ereignis ausgelöst wird, die Beobachter, die dieses Ereignis beobachten, ausgeführt werden.
Im Allgemeinen wird das beobachtete Objekt als Referenz weitergegeben, damit der Beobachter es aktualisieren oder auf Änderungen überprüfen kann.
Schauen Sie sich dieses Beispiel aus dem Magento-Code an:
Klasse Mage_Catalog_Model_Product erweitert 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)); $ dieses zurückgeben;
Okay, dies ist die validate-Methode, wie sie in Ihrem Magento-Lauf der Mühle verfügbar ist. Zur besseren Übersicht habe ich zwei Variablen durch ihre tatsächlichen Werte ersetzt. Hier können Sie zwei Ereignisse sehen. catalog_product_validate_before
und catalog_product_validate_after
, Jedes davon gibt das Produktobjekt zusammen mit dem Versand an, damit der Beobachter damit etwas anfangen kann.
Klasse Enterprise_AdminGws_Model_Models erweitert Enterprise_AdminGws_Model_Observer_Abstract public function catalogProductValidateAfter (Varien_Event_Observer $ observer) if ($ this -> _ role-> getIsAll ()) return; $ product = $ observer-> getEvent () -> getProduct (); $ this -> _ forceAssignToWebsite ($ product-> getWebsiteIds ());
Und hier ist eine Beobachterklasse und ihre Methode. Diese Klasse und Methode werden mithilfe des Konfigurationssystems von Magento mit dem System verbunden. Die Veranstaltung selbst wird der Beobachterklasse übergeben und das Produkt ist von der Veranstaltung aus erreichbar.
Ich werde über das eigentliche Erstellen und Anhängen von Beobachtern berichten und im nächsten Post mehr Details zu den Themen finden.
Eines der Hauptargumente für die Verwendung des Observer Patterns oder seiner nahen Verwandten wie dem Pub / Sub-Pattern ist die Modularität, die es bietet.
Da sich etwas in ein Ereignis einhaken kann, das gerade ausgelöst wird, haben Sie nie einen starken Bezug darauf. Dies ist besonders nützlich, wenn Sie immer mit Modulen arbeiten, die möglicherweise Dienste für ein bestimmtes Element bereitstellen oder nicht bereitstellen, das möglicherweise nicht verfügbar ist.
Um Magento wieder verwenden zu können, kann ich ein Modul erstellen, das Produktänderungen sowie ein von mir erstelltes Modul, das seine eigenen benutzerdefinierten Ereignisse auslöst, überwacht. In einem regulären System wäre dieses Modul jetzt vom vorherigen Modul abhängig, aber mit einem Pub / Sub- oder Observer-Pattern kann ich diese Abhängigkeit optional machen und nur das anwenden, was mein aktuelles Modul ist, wenn es verfügbar ist.
Nach diesem kurzen Überblick über die genauen Entwurfsmuster und den eingehenderen Blick auf das Observer-Muster werde ich im nächsten Beitrag erläutern, wie es in Magento verwendet wird, wie Sie es in Ihren eigenen Modulen einsetzen und bereitstellen können in Ihren eigenen Modulen sowie zum Einhängen von anderen oder für andere zum Einhängen.