Magento-waarnemers begrijpen

Magento heeft een redelijk goed geïmplementeerd Event / Observer-systeem, maar voordat we ons verdiepen in de details, zorgen we ervoor dat we een duidelijk inzicht hebben in de ontwerppatronen die in de Magento-applicatie spelen.

Laten we het vooral hebben over het concept van het gebeurtenissysteem, hoe het werkt en wat het is. Hoewel we bepaalde ontwerppatronen in andere artikelen over Tuts + hebben behandeld, hebben we dit niet gedaan in de context van Magento. 

Laten we daarom eens naar het patroon kijken om een ​​duidelijk beeld te krijgen van hoe het is, hoe het werkt en hoe het nuttig is.

Ontwerp patronen als geheel

Door de jaren heen is een breed scala aan ontwerppatronen ontwikkeld. Maar wat is een ontwerppatroon precies?

Om Wikpedia te citeren:

"In software engineering is een ontwerppatroon een algemene herbruikbare oplossing voor een veelvoorkomend probleem binnen een bepaalde context in het ontwerpen van software."

Als we dat een beetje verkleinen, blijven we achter: een ontwerppatroon is een herbruikbare oplossing voor een veel voorkomend probleem. Dat is een perfecte omschrijving. 

Het ontwerppatroon is een sjabloon dat kan worden gebruikt om een ​​oplossing te maken die past bij problemen van dezelfde aard. Het patroon zelf is niet de eigenlijke oplossing, het bepaalt de manier waarop de oplossing als richtlijn kan worden geïmplementeerd. 

Uw werkelijke oplossing, zelfs als u zich aan het gedefinieerde patroon houdt, kan anders zijn dan de mijne, zolang ze beide de richtlijnen volgen die door het ontwerppatroon zijn uiteengezet.

The Observer Pattern

Nu we weten wat een ontwerppatroon werkelijk is, laten we eens kijken naar het waarnemerspatroon.

Voor het eerst geïmplementeerd in de MVC-architectuur, is het waarnemerspatroon een zeer waardevolle toevoeging aan de architectuur gebleken. Mede hierdoor hebben een enorme hoeveelheid bibliotheken het patroon in de loop van de tijd geïmplementeerd en als je al een tijdje programmeert, is het niet onwaarschijnlijk dat je het al hebt gebruikt.

Genoeg geschiedenis nu, laten we eens kijken hoe het werkt.

Iets observeren is ernaar kijken of zijn toestand observeren. In een technische context is dit niet anders. Waarnemers kijken per definitie naar iets en in ons geval naar gebeurtenissen. Het idee hier is dat als een evenement wordt verzonden, de waarnemers die deze gebeurtenis observeren worden uitgevoerd. 

Over het algemeen wordt het onderwerp dat wordt geobserveerd doorgegeven door verwijzing, zodat de waarnemer het kan bijwerken of controleren op wijzigingen..

Bekijk dit voorbeeld samengesteld uit de Magento-code:

class Mage_Catalog_Model_Product breidt Mage_Catalog_Model_Abstract uit public function validate () Mage :: dispatchEvent ('catalog_product_validate_before', array ('product' => $ this)); $ This -> _ getResource () -> validate ($ this); Mage :: dispatchEvent ('catalog_product_validate_after', array ('product' => $ this)); stuur $ dit terug; 

Oke, dus dit is de validatiemethode zoals deze beschikbaar is in je gewone Magento-installatie. Voor de duidelijkheid heb ik twee variabelen vervangen door hun werkelijke waarden. U kunt zien dat hier twee evenementen worden verzonden. catalog_product_validate_before en catalog_product_validate_after, elk van deze geeft het productobject samen met de verzending, zodat de waarnemer er iets mee kan doen.

class Enterprise_AdminGws_Model_Models breidt Enterprise_AdminGws_Model_Observer_Abstract uit public function catalogProductValidateAfter (Varien_Event_Observer $ observator) if ($ this -> _ role-> getIsAll ()) return;  $ product = $ waarnemer-> getEvent () -> getProduct (); deze $ -> _ forceAssignToWebsite ($ product-> getWebsiteIds ()); 

En hier is een waarnemersklasse en zijn methode. Deze klasse en methode zijn aan het systeem gekoppeld met behulp van het configuratiesysteem van Magento. Het evenement zelf wordt overhandigd aan de waarnemersklasse en het product is bereikbaar vanaf het evenement.

Ik zal het daadwerkelijke maken en inhaken van waarnemers behandelen en de onderwerpen met meer detail in de volgende post bereiken.

Waarom dit patroon gebruiken?

Een van de belangrijkste argumenten om het waarnemerspatroon te gebruiken, of zijn naaste familieleden zoals het Pub / Sub-patroon, is de modulariteit die het biedt.

Omdat alles kan aansluiten bij een gebeurtenis die wordt verzonden, heeft u er nooit een sterke verwijzing naar. Dit is uitzonderlijk handig in een omgeving waar u altijd met modules werkt die al dan niet services leveren aan een specifiek element dat al dan niet beschikbaar is. 

Om Magento opnieuw te gebruiken, kan ik een module bouwen die productveranderingen zal observeren, evenals een module die ik heb gebouwd die zijn eigen aangepaste evenementen afvuurt. Nu, in een gewoon systeem zou deze module afhankelijk zijn van de eerdere module, maar met behulp van een Pub / Sub of het waarnemingspatroon kan ik die afhankelijkheid optioneel maken en alleen toepassen wat het mijn huidige module is wanneer het beschikbaar is.

Wat is het volgende?

Na deze snelle opfriscursus over wat precies ontwerppatronen zijn en de meer diepgaande blik op het waarnemerspatroon, zal ik in het volgende bericht uitleggen hoe het in Magento wordt gebruikt, hoe je het in je eigen modules kunt gebruiken en ze kunt gebruiken ook in je eigen modules om in te haken bij verschillende modules, of voor anderen om in te haken.