Welche (Arten von) Klassen werden in Magento 2 generiert?

9

In Magento 2 gibt es eine Reihe von Klassen, die automatisch generiert und gespeichert var/generationwerden und im Kerncode verwendet werden.
Beim Versuch, ein benutzerdefiniertes Modul durch Replizieren eines der Kernmodule zu erstellen, habe ich festgestellt, dass auch für mein Modul einige generierte Klassen vorhanden sind.
In den generierten Klassen habe ich Proxys, Interceptors, Fabriken gesehen ....

Gibt es eine vollständige Liste der Klassen oder Klassentypen, die automatisch generiert werden?
Und als Nebenfrage ... wann / wo werden sie erzeugt?

Marius
quelle

Antworten:

9

Es gibt verschiedene Gründe, unterschiedliche Entitäten zu generieren:

Proxy - wird zum verzögerten Laden verwendet. Für jeden Typ ist jedoch eine separate Proxy-Klasse erforderlich, sodass es für Entwickler ärgerlich wäre, sie manuell zu schreiben, damit Magento sie generiert. Yo findet nur Verweise auf Proxies in di.xml

Factory - ist eine Klasse, mit der nicht injizierbare Elemente (Entitäten) erstellt werden. Gleich wie Proxies. PHP hat noch keine Generika, daher generieren wir automatisch Fabriken, damit Entwickler keinen Boilerplate-Code schreiben. Sie werden mit Fabriken im gesamten Magento-Code interagieren. Höchstwahrscheinlich benötigen Sie Ihre eigenen Fabriken für Ihre Unternehmen. Fragen Sie einfach nach der entsprechenden Factory im Konstruktor und sie wird beim nächsten Lauf oder während des Compilerlaufs generiert.

Interceptor - ist eine Infrastrukturklasse, die von der Interception-Komponente verwendet wird. Wie Flyingmana und Phil Winkle bemerkten, sollten Sie sowieso nicht mit ihnen interagieren.

Es werden eine Reihe anderer Entitäten generiert (z. B. Logger für den Profilmodus für Objektdiagramme), aber diese drei sind am wichtigsten.

Magento 2 kann auch kompiliert werden. Durch die Kompilierung werden DI und Interception schneller. Die gesamte Codegenerierung und -kompilierung kann mit dev / tools / Magento / Tools / Di / compiler.php erfolgen

Anton Kril
quelle
2

Aus dem Konzept:

Sie müssen nicht wissen, welche Arten von Klassen automatisch generiert werden, da Sie sie nie berühren oder verwenden müssen, nicht einmal Sie sollten.

Sie werden (noch?) Im laufenden Betrieb generiert, sollten aber später über den Befehl cli oder ähnliches generiert werden.

Die Liste der vorhandenen Typen kann jederzeit erweitert werden, wenn die internen Teile einen neuen benötigen. Der Zugriff auf sie erfolgt jedoch immer versteckt hinter den normalen dokumentierten APIs (allgemein als Funktionsaufrufe bezeichnet).

Flyingmana
quelle
1
Ich bin mir nicht sicher über "oder benutze sie". Hier ein Beispiel: Im Magento\Cms\Block\BlockKonstruktor wird eine Instanz von \Magento\Cms\Model\BlockFactoryverwendet. Diese Klasse ist nirgends im Code. Es ist nur in gefunden var/generation. Wenn ich also ein ähnliches Modul mache, muss ich möglicherweise eine ähnliche Klasse verwenden.
Marius
2

Auf diese Weise generiert Magento den aspektorientierten Ansatz für die neue Plattform. indem die Vorher-, Umher- und Nachher-Ereignisse tatsächlich generiert werden, anstatt sie dynamisch auszulösen. Dies schafft ein Gleichgewicht zwischen Komfort für den Programmierer und Leistung für die Plattform.

Einige Techniken wie die automatische Abhängigkeitsinjektion werden in die generierten Klassen abgeflacht und nicht über Reflexion ausgeführt. Dies ist wiederum eine Technik zur Verbesserung der Leistung.

philwinkle
quelle
Vielen Dank für die Erklärung des "Warum?", Aber meine Hauptfragen waren "Was?" und wo?".
Marius