Wie viele Designmuster hat Magento?

Antworten:

37

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:

  • Der Namespace der Proxy-Klasse ist derselbe wie der des Originals (Magento \ Catalog \ Model \ Product \ Attribute \ Source \ Status).
  • Die Proxy-Klasse erweitert nur ein Objekt, dh den Objektmanager
  • Hat magische Funktionen wie __sleep, __wake, die nur bei bestimmten Aktionen und Funktionen wie __clone aufgerufen werden, erstellt ein Objekt der ursprünglichen Klasse und stellt das Objekt nur dann zur Verfügung, wenn es benötigt wird (unter Verwendung des Entwurfsmusters für verzögertes Laden ), wodurch das verbessert wird Leistung der Anwendung https://devdocs.magento.com/guides/v2.0/extension-dev-guide/proxies.html

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:

  • Endgültige Methoden
  • Abschlussklassen
  • Nicht öffentliche Methoden
  • Statische Methoden
  • __konstruieren
  • Virtuelle Typen
  • Objekte, die vor Magento \ Framework \ Interception instanziiert wurden, werden gebootet
  • Objekte, die nicht vom ObjectManager instanziiert werden (z. B. durch direkte Verwendung von new). https://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html

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

Evgeniy Kapelko
quelle