Frage

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

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

War es hilfreich?

Lösung

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

Proxy - es wird für Lazy-Loading verwendet.Aber jeder Typ benötigt eine separate Proxy-Klasse, so dass es für Entwickler ärgerlich wäre, sie manuell zu schreiben, damit Magento sie generiert.Sie werden nur Verweise auf Proxys in di finden.XML

Fabrik - ist eine Klasse, die zum Erstellen von nicht injizierbaren Elementen (Entitäten) verwendet wird.Genau wie Proxies.PHP hat noch keine Generika, daher generieren wir automatisch Fabriken, damit Entwickler keinen Boilerplate-Code schreiben.Sie werden mit Fabriken über Magento-Code interagieren.Höchstwahrscheinlich benötigen Sie Ihre eigenen Fabriken für Ihre Entitäten.Fragen Sie einfach nach der entsprechenden Factory im Konstruktor und sie wird beim nächsten Lauf oder während des Compiler-Laufs generiert.

Abfangjäger - ist eine Infrastrukturklasse, die von der Abfangkomponente verwendet wird.Wie Flyingmana und Phil Winkle bemerkt haben, solltest du sowieso nicht mit ihnen interagieren.

Es werden eine Reihe anderer Entitäten generiert (z. B. Logger für den Objektdiagramm-Profilierungsmodus), aber diese 3 sind am wichtigsten.

Magento 2 kann auch kompiliert werden. Zusammenstellung macht DI und Abfangen schneller.Die gesamte Codegenerierung und -kompilierung kann mit dev / tools / Magento / Tools / Di / compiler erfolgen.PHP

Andere Tipps

Aus dem Konzept:

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

Sie bekommen (immer noch?) im laufenden Betrieb generiert, sollte aber später per CLI-Befehl oder ähnlichem generiert werden.

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

So generiert Magento den aspektorientierten Ansatz für die neue Plattform;indem Sie die Vorher-, Um- und Nachher- "Ereignisse" tatsächlich generieren, anstatt sie dynamisch zu versenden.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, anstatt über Reflektion ausgeführt zu werden - auch dies ist eine Technik zur Verbesserung der Leistung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top