Wie viele Designmuster hat Magento 2?
Magento 1/2 Design Patterns
Teil 1: MVC
Magento verwendet ein einzigartiges MVC-Muster, das eine DOM-basierte Konfigurationsebene verwendet. Es nutzt XML, um die Konfiguration und die Aktionen der Anwendung zusätzlich zur regulären Model-View-Controller-Architektur zu steuern.
Teil 2: Front Controller
Magento verwendet das Front Controller-Muster, um Workflows für seine Anwendung zu implementieren. Es hat einen einzigen Einstiegspunkt (index.php) für alle Anfragen. Mal sehen, wie das alles funktioniert.
Teil 3: Fabrik
Die Factory-Methode wird verwendet, um Klassen in Magento zu instanziieren. Sie instanziieren eine Klasse in Magento, indem Sie eine geeignete Methode aufrufen, die einen abstrakten Namen für eine Klassengruppe gefolgt von einem Klassennamen übergibt. Klassengruppen und ihre entsprechenden Abstraktionen werden in Ihren Konfigurations-XML-Dateien im Ordner / etc / Ihres Moduls deklariert.
Teil 4: Singleton
Ähnlich wie bei der Abstraktion von Factory-Klassen und Klassengruppen in Magento wird das Singleton-Muster auch für Blöcke und Klassen instanziiert.
Teil 5: Registrierung
Das Registrierungsmuster ist im Grunde ein Muster, mit dem jedes Objekt oder Daten in einem öffentlichen globalen Bereich für jede Ressource verfügbar sind.
Teil 6: Prototyp
Das Prototype-Muster in Magento wird als Erweiterung des Abstract Factory-Musters verwendet. Es stellt sicher, dass eine geeignete Unterklasse über geeignete Typen instanziiert wird, die einem Objekt zugewiesen sind. Was bedeutet das? Grundsätzlich bedeutet dies, dass immer dann, wenn Sie eine bestimmte Klasse benötigen, die über ihren übergeordneten Typ definiert ist, das Prototypmuster sicherstellt, dass Sie die richtige Klasse erhalten, die mit den Anforderungen umgehen kann.
Teil 7: Objektpool
Das Objektpoolmuster hält Objekte immer wieder einsatzbereit, anstatt sie erneut zu instanziieren und zu zerstören, sobald sie fertig sind. Dies ist eine großartige Möglichkeit, um den Speicherverbrauch und die Rechenzyklen zu reduzieren.
Teil 8: Iterator
Das Iteratormuster ist ein Entwurfsmuster, mit dem ein Objekt die Elemente einer anderen Klasse durchlaufen kann. Auf diese Weise können Sie einen Iterator angeben und die Übergabe mehrerer unterschiedlicher Datensätze ermöglichen, ohne die zugrunde liegende Struktur zu ändern, die die Iteration ermöglicht.
Teil 9: Lazy Loading
Lazy Loading ist ein Entwurfsmuster, das das Laden eines Objekts bis zu dem Zeitpunkt verzögert, an dem das Objekt aufgerufen wird. Mit Magento verwenden sie dies nicht für Objekte, sondern für Daten.
Teil 10: Service Locator
Der Service Locator ist ein Entwurfsmuster, mit dem ein Benutzer einen Service erhalten kann, indem er den Prozess in einer Abstraktionsschicht einkapselt. Auf diese Weise kann der Benutzer den entsprechenden oder besten Dienst abrufen, ohne zu wissen, um welchen Dienst es sich zur Laufzeit handelt.
Teil 11: Modul
Das Module Design Pattern ist eine Form der modularen Programmierung, die die Gruppierung der Funktionalität eines Programms in unabhängige, austauschbare Module betont.
Teil 12: Beobachter
Im Beobachtermuster wird ein Ereignis-Listener an einem bestimmten Punkt während der Ausführung einer Anwendung festgelegt. Andere Komponenten der Anwendung können sich in diesen Ereignis-Listener "einhängen" und ihren Code zu diesem Zeitpunkt ausführen.
Teil 13: Aktiver Datensatz
Objekte sind eine Darstellung einer Zeile in der Datenbanktabelle. Diese Objekte sollten Eigenschaften haben, die die Spalten widerspiegeln, die die Struktur der Tabelle darstellen, sowie Methoden, um Änderungen dieser Eigenschaften in der Datenbank zu ermöglichen.
Die Verwendung des Musters durch Magento
Die Klassen, die nach der Klasse Mage_Core_Model_Abstract erben, haben Zugriff auf die Methoden load (), save () und delete (), mit denen Datensätze in einer Tabelle, mit der die Klasse verbunden ist, geladen, geändert, erstellt oder gelöscht werden können. Darüber hinaus erbt die Klasse Mage_Core_Model_Abstract von Varien_Object, wodurch wir auf die wirklich magischen Methoden __set () und __get () zugreifen können, die für die automatische Zuordnung von Spalten in einer Datenbanktabelle mit den Eigenschaften eines bestimmten Objekts verantwortlich sind.
Zusatz Magento 2
SERVICE-VERTRAG-DESIGN-MUSTER
Magento ist ein erweiterungsbasiertes oder modulares System, mit dem ein Drittentwickler Kernteile seines Frameworks anpassen und überschreiben kann. Diese Anpassungen können zu verschiedenen Problemen führen, z. B. müssen Entwickler die von externen Erweiterungen vorgenommenen Anpassungen nachverfolgen. Um dies zu überwinden, entwickelt Magento ein Muster für Serviceverträge. Ein Servicevertrag ist eine Reihe von Schnittstellen, die als Schicht zwischen einem Endbenutzer und einer Geschäftsschicht fungieren. Anstatt also die Geschäftslogik für die Anpassung direkt dem Endbenutzer zur Verfügung zu stellen, liegt eine Schicht mit der Bezeichnung Servicevertrag dazwischen.
Serviceverträge verbessern die Modularität von Magento. Hilft Händlern bei der einfachen Aktualisierung von Magento Stellen Sie sicher, dass eine gut definierte und dauerhafte API vorhanden ist, die von anderen externen und Magento-Modulen implementiert wird. Bieten Sie eine einfache Möglichkeit, Geschäftslogik über REST- oder SOAP-Schnittstellen verfügbar zu machen.
OBJEKTMANAGER
Es selbst besteht aus verschiedenen Mustern wie: - Abhängigkeitsinjektion, Singleton, Factory, Abstract Factory, Composite, Strategie, CQRS, Decorator und vielen mehr. Wir werden einige der am häufigsten verwendeten Muster diskutieren. Der Objektmanager spielt eine sehr große Rolle, Magento verbietet die direkte Verwendung. Der Objektmanager ist für die Implementierung von Factory-, Singleton- und Proxy-Mustern verantwortlich. Es instanziiert automatisch Parameter in Klassenkonstruktoren. Bevor Sie die Zukunft bewegen, sollten Sie sich mit injizierbaren und nicht injizierbaren Objekten vertraut machen:
INJEKTIERBARE GEGENSTÄNDE
Sie haben keine eigene Identität wie EventManager, CustomerAccountManagementService.
NICHT INJEKTIERBARE GEGENSTÄNDE
Wie z. B. Kunde, Produkt usw. Diese Entitäten haben normalerweise ihre Identität und ihren Status, da es wichtig ist, zu wissen, an welcher Instanz der Entität wir genau arbeiten müssen.
ABHÄNGIGKEITSSPRITZE
Es ist eine Alternative zu Mage in Magento 1. Es ist ein Konzept, das abhängige Objekt durch eine externe Umgebung zu injizieren, anstatt es intern zu erstellen. Daher werden wir nach Ressourcen fragen, wenn unser Objekt erstellt wird, anstatt bei Bedarf Ressourcen zu erstellen. Dies hilft bei zukünftigen Änderungen und das Testen wird sehr einfach, indem erforderliche Objekte verspottet werden.
FABRIKMUSTER ODER FABRIKKLASSEN:
In Magento 2 Factory erstellen Klassen eine Ebene zwischen dem Objektmanager und dem Geschäftscode. Factory-Klassen müssen nicht explizit definiert werden, da sie automatisch generiert werden. Wir sollten Factory-Klassen für nicht injizierbare Objekte erstellen.
PROXY-MUSTER
Proxy-Klassen werden verwendet, um anstelle einer anderen Klasse zu arbeiten, und in Magento 2 werden sie manchmal anstelle von ressourcenhungrigen Klassen verwendet. Um zu verstehen, was Proxy-Klassen tun, wollen wir den Grund sehen, der zum Auftreten von Proxy-Klassen führt. Wie wir wissen, verwendet Magento die Konstruktorinjektion für die Objekterstellung. Wenn wir ein Objekt instanziieren, werden auch alle Klassen in seinem Konstruktor instanziiert, was zu einer Instanziierungskette über einen Konstruktor führt. Dies kann den Prozess erheblich verlangsamen und die Leistung einer Anwendung beeinträchtigen Um die Ketteninstanziierung zu stoppen, verwendet Magento Proxy-Klassen.
Sehen wir uns folgenden Code an: -
Magento\Catalog\Model\Product\Attribute\Source\Status\Proxy
Magento\Catalog\Model\Product\Link\Proxy
Im obigen Code verwenden wir Proxy-Klassen für catalogProductStatus und productLink. Wenn wir rennen
php bin/magento setup:di:compile
Magento erstellt Proxy-Klassen im Handumdrehen mit di.xml mit einigen festen Konventionen und ersetzt so das ursprüngliche Objekt durch ein Proxy-Klassenobjekt. Schauen wir uns nun unsere Proxy-Klasse an, um zu verstehen, wie sie funktioniert
Einige gängige Konventionen von Magento folgen beim Erstellen eines Proxys:
Plugins (Interceptors)
Überblick
Ein Plugin oder Interceptor ist eine Klasse, die das Verhalten von Funktionen öffentlicher Klassen ändert, indem sie einen Funktionsaufruf abfängt und Code vor, nach oder um diesen Funktionsaufruf ausführt. Auf diese Weise können Sie das Verhalten der ursprünglichen öffentlichen Methoden für jede Klasse oder Schnittstelle ersetzen oder erweitern.
Erweiterungen, die das Verhalten einer öffentlichen Methode abfangen und ändern möchten, können eine Plugin-Klasse erstellen, die als Plugins bezeichnet wird.
Dieser Abfangansatz reduziert Konflikte zwischen Erweiterungen, die das Verhalten derselben Klasse oder Methode ändern. Ihre Plugin-Klassenimplementierung ändert das Verhalten einer Klassenfunktion, nicht jedoch die Klasse selbst. Da sie nach einer konfigurierten Sortierreihenfolge sequenziell aufgerufen werden können, treten keine Konflikte zwischen diesen Interceptoren auf.
Einschränkungen
Plugins können nicht mit folgenden Programmen verwendet werden:
ObjectManager
Überblick
Große Anwendungen, wie die Magento-Anwendung, verwenden einen Objektmanager, um zu vermeiden, dass beim Erstellen von Objekten während der Instanziierung Code vom Typ "Boilerplate" verwendet wird.
Im Magento-Framework führt die Implementierung des ObjectManagerInterface die Aufgaben eines Objektmanagers aus.
Verantwortlichkeiten
Der Objektmanager hat folgende Aufgaben:
Objekterstellung in Fabriken und Proxies. Implementieren des Singleton-Musters durch Zurückgeben derselben freigegebenen Instanz einer Klasse, wenn dies angefordert wird. Abhängigkeitsverwaltung durch Instanziieren der bevorzugten Klasse, wenn ein Konstruktor seine Schnittstelle anfordert. Automatisches Instanziieren von Parametern in Klassenkonstruktoren. https://devdocs.magento.com/guides/v2.0/extension-dev-guide/object-manager.html