Magento har et ganske godt implementert Event / Observer-system, men før vi dykker inn i detaljene, la oss sørge for at vi har en klar forståelse av designmønstrene som er i spill i Magento-programmet.
Spesielt kan vi snakke om konseptet av arrangementssystemet, hvordan det fungerer og hva det er. Selv om vi har dekket enkelte designmønstre i andre artikler om Tuts +, har vi ikke gjort det innenfor Magento.
For det formål, la oss ta en titt på mønsteret for å få en klar forståelse av hvordan det er, hvordan det fungerer, og hvordan det er gunstig.
Gjennom årene har et bredt spekter av designmønstre blitt utviklet. Men hva er et mønster nøyaktig?
For å sitere Wikpedia:
"I programvare engineering er et designmønster en generell gjenbrukbar løsning på et vanlig problem i en gitt sammenheng i programvareutforming."
Hvis vi reduserer det litt, er vi igjen: Et designmønster er en gjenbrukbar løsning på et vanlig problem. Det er så perfekt en beskrivelse.
Designmønsteret er en mal som kan brukes til å skape en løsning som passer til problemer av samme natur. Mønsteret i seg selv er ikke den faktiske løsningen, det definerer måten løsningen kan implementeres som en retningslinje.
Din faktiske løsning, selv om du overholder det definerte mønsteret, kan være forskjellig fra meg så lenge de begge følger retningslinjene som er angitt av designmønsteret.
Nå som vi vet hva et mønster virkelig er, kan vi se på observatørmønsteret.
Først implementert i MVC-arkitekturen, har observatormønstret vist seg å være et svært verdifullt tillegg til arkitekturen. Delvis på grunn av dette har en enorm mengde biblioteker implementert mønsteret over tid, og hvis du har programmert en stund, er det ikke usannsynlig at du allerede har brukt den.
Nok historie nå skjønt, la oss se på hvordan det fungerer.
Å observere noe er å se på det, eller å observere sin tilstand. I en teknisk sammenheng er dette ikke annerledes. Observatører per definisjon ser på noe og i vårt tilfelle, hendelser. Ideen her er at hvis en hendelse blir sendt, blir observatørene som observerer denne hendelsen henrettet.
Generelt vil emnet som blir observert, sendes videre ved referanse for at observatøren skal kunne oppdatere eller sjekke den for endringer.
Sjekk ut dette eksemplet satt sammen fra Magento-koden:
klasse Mage_Catalog_Model_Product extends Mage_Catalog_Model_Abstract offentlige funksjon validere () Mage :: dispatchEvent ('catalog_product_validate_before', array ('product' => $ this)); $ Dette -> _ getResource () -> validere ($ denne); Mage :: dispatchEvent ('catalog_product_validate_after', array ('product' => $ this)); returner $ dette;
Ok, så dette er valideringsmetoden som den er tilgjengelig i løpet av fabrikken Magento-installasjonen. For klarhet erstattet jeg to variabler med deres faktiske verdier. Du kan se to hendelser sendes her. catalog_product_validate_before
og catalog_product_validate_after
, hver av disse gir produktobjektet sammen med forsendelsen slik at observatøren kan gjøre noe med det.
klasse Enterprise_AdminGws_Model_Models utvider Enterprise_AdminGws_Model_Observer_Abstract public function catalogProductValidateAfter (Varien_Event_Observer $ observatør) if ($ this -> _ role-> getIsAll ()) return; $ product = $ observator-> getEvent () -> getProduct (); $ Dette -> _ forceAssignToWebsite ($ produkt-> getWebsiteIds ());
Og her er en observatørklasse og dens metode. Denne klassen og metoden er koblet til systemet ved hjelp av Magento's konfigurasjonssystem. Selve arrangementet blir overlevert til observatørklassen og produktet kan nås fra arrangementet.
Jeg skal dekke selve opprettelsen og hekling av observatører, så vel som å nå emner med mer detalj i neste innlegg.
En av de viktigste argumentene for å bruke observatørmønsteret, eller dens nærstående som Pub / Sub-mønsteret, er modulariteten det gir.
Fordi alt kan hekte seg til et arrangement som sendes, har du aldri en sterk referanse til det. Dette er usedvanlig nyttig i en innstilling der du alltid jobber med moduler som kanskje eller ikke gir tjenester til et bestemt element som kanskje er eller ikke er tilgjengelig.
For å bruke Magento igjen, kan jeg bygge en modul som vil observere produktendringer, samt en modul jeg bygget som branner av sine egne tilpassede hendelser. Nå, i et vanlig system vil denne modulen være avhengig av den tidligere modulen, men ved hjelp av en Pub / Sub eller Observer Mønster kan jeg gjøre denne avhengigheten valgfri og bare gjelde hva det er min nåværende modul til den når den er tilgjengelig.
Etter denne raske oppdateringen på hva nøyaktig designmønstre er, så vel som mer i dybden, ser du på Observer Pattern, i neste innlegg vil jeg forklare hvordan det brukes i Magento, hvordan du kan begynne å bruke det i dine egne moduler og gi dem i dine egne moduler også å koble inn fra forskjellige, eller for andre å hekte inn.