Sie werden hier keine gute, klare und deterministische Antwort finden. Im Großen und Ganzen sollten Sie Ereignisse in Ihrem Modul dort auslösen, wo Sie und Ihre Benutzer sie benötigen. Wenn Sie nicht wissen, wo sie möglicherweise benötigt werden, müssen Sie sie nicht auslösen. Magento selbst sendet so viele Ereignisse an so vielen verschiedenen Orten aus (Steuerung vor / nach dem Versand, jede Rohoperation usw.), dass Ihr Modul bereits eine Reihe nützlicher Ereignisse sendet, ohne dass Sie etwas unternehmen.
Da dies nicht zufriedenstellend ist, möchten Sie, dass Ihr Modul ein Ereignis auslöst, wenn Ihr Modul eine Aktion ausführt, zu der Ihre Benutzer Elemente hinzufügen, daraus löschen, ändern oder eine separate Aktion ausführen möchten, die von der ursprünglichen Aktion unabhängig ist. Zum Beispiel - Magento hat ein visitor_init
Ereignis , das nicht Teil seiner Standard-Suite von automatisch generierten Ereignissen ist. Mit diesem Ereignis können Programmierer das Besucherobjekt ändern, bevor Magento Daten protokolliert. Dies konnten die ursprünglichen Modulentwickler nicht deterministisch wissenHier musste ein Ereignis hinzugefügt werden - wahrscheinlich aufgrund von Funktionsanfragen und / oder Interviews mit Systembenutzern. Wissen, was Ihre Benutzer wollen, und wenn es nicht möglich / praktisch ist, eine UI / UX zu erstellen, die sie über den Administrator ausführen können, fügen Sie einen Ereignis-Hook hinzu, damit ein anderer Programmierer dies für sie tun kann.
Weniger sexy kann das Hinzufügen von Ereignissen auch eine kostengünstige Möglichkeit sein, Entwicklern (entweder Ihren Benutzern oder sogar Ihrem Team) das Hinzufügen von Funktionen zu einem kniffligen Teil des Codes zu ermöglichen, den jeder zu berühren fürchtet. Platzieren Sie Ihren dispatchEvent
Anruf in der Mitte des Codes, schließen Sie ihn an, und Sie können Ihre Funktionalität hinzufügen, ohne den Code im ursprünglichen Bereich zu stören. [Editor: Außerdem sollten Sie diesen schrecklichen Code irgendwann überarbeiten]
In Bezug auf die Leistung hängt das Hinzufügen eines Ereignisses zum Versand davon ab, wo Sie es hinzufügen. Wenn Sie dispatch
event aufrufen , muss Magento einige zusätzliche PHP-Aufrufe durchführen, die Konfiguration für konfigurierte Beobachter abfragen und die Beobachter dann anrufen. Einmal gemacht, ist dies eine günstige Ergänzung im Rahmen eines Standard-Magento-Versands. Dies kann sich jedoch summieren, wenn dies wiederholt durchgeführt wird (beispielsweise vor jedem Rendern eines Blocks). Hier gibt es keine gute Faustregel - wie immer lautet die richtige Antwort Profil.
Schließlich ist es mit Magento 2 noch zu früh, dies zu sagen. Das alles gilt immer noch - das Plugin-System fügt jedoch ein paar Falten hinzu. Plugins sind aus einer Sicht eine Möglichkeit , ereignisähnliches Verhalten für jeden öffentlichen Methodenaufruf in Magento zu erzeugen . Wenn Sie Ihre Klassen richtig gestalten, sollten Sie theoretisch nie eine Veranstaltung brauchen. In der Praxis ist es jedoch eine verlockende Lösung für Magento-Entwickler, ein Ereignis in einen geschützten oder privaten Methodencode zu ziehen, wenn es sich bei der Alternative um einen langen Refactoring-Prozess handelt. Darüber hinaus kann das Erstellen eines speziell benannten Ereignisses für Entwickler, die Ihr Modul verwenden, häufig zu einer freundlicheren Erfahrung führen.
Ich hoffe, das hilft!