Magento ha un sistema Event / Observer molto ben implementato, ma prima di approfondire le specifiche, assicuriamoci di avere una chiara comprensione dei pattern di design che sono in gioco nell'applicazione Magento.
Nello specifico, lascia 'parlare del concetto del sistema degli eventi, di come funziona e di cosa è. Anche se abbiamo coperto alcuni modelli di design in altri articoli su Tuts +, non lo abbiamo fatto nel contesto di Magento.
A tal fine, diamo un'occhiata al modello al fine di ottenere una chiara comprensione di come è, come funziona e come è vantaggioso.
Nel corso degli anni una vasta gamma di modelli di design è stata smorzata. Ma cosa è un modello di design esattamente?
Per citare Wikpedia:
"Nell'ingegneria del software, un modello di progettazione è una soluzione generale riutilizzabile per un problema comune in un dato contesto nella progettazione del software."
Se riduciamo un po 'ciò che ci rimane: un modello di progettazione è una soluzione riutilizzabile per un problema comune. Questa è una descrizione perfetta.
Il modello di progettazione è un modello che può essere utilizzato per creare una soluzione adatta ai problemi della stessa natura. Lo stesso modello non è la soluzione reale, definisce il modo in cui la soluzione può essere implementata come una linea guida.
La tua soluzione reale, anche se aderire al modello definito può essere diversa dalla mia fintanto che entrambi seguono le linee guida stabilite dallo schema di progettazione.
Ora che sappiamo cosa sia realmente un modello di design, diamo un'occhiata al Pattern di Osservatore.
Inizialmente implementato nell'architettura MVC, il pattern Observer si è rivelato un'aggiunta molto preziosa all'architettura. In parte a causa di ciò un'enorme quantità di librerie ha implementato il modello nel tempo e se hai programmato per un po 'non è improbabile che tu l'abbia già usato.
Ora basta storia, diamo un'occhiata a come funziona.
Osservare qualcosa è guardarlo o osservarne lo stato. In un contesto tecnico, questo non è diverso. Gli osservatori per definizione stanno guardando qualcosa e nel nostro caso, gli eventi. L'idea qui è che se un evento viene inviato, gli osservatori che stanno osservando questo evento vengono eseguiti.
Generalmente, il soggetto che viene osservato verrà passato per riferimento in modo che l'osservatore possa aggiornarlo o controllarlo per le modifiche.
Dai un'occhiata a questo esempio messo insieme dal codice Magento:
class Mage_Catalog_Model_Product estende Mage_Catalog_Model_Abstract public function validate () Mage :: dispatchEvent ('catalog_product_validate_before', array ('product' => $ this this)); $ This -> _ getResource () -> validate ($ this); Mage :: dispatchEvent ('catalog_product_validate_after', array ('product' => $ this this)); restituire $ questo;
Bene, quindi questo è il metodo di convalida come disponibile nell'installazione di Magento del tuo run of the mill. Per chiarezza ho sostituito due variabili con i loro valori reali. Puoi vedere due eventi qui inviati. catalog_product_validate_before
e catalog_product_validate_after
, ognuno di questi fornisce l'oggetto del prodotto insieme all'invio in modo che l'osservatore possa fare qualcosa con esso.
class Enterprise_AdminGws_Model_Models estende Enterprise_AdminGws_Model_Observer_Abstract public function catalogProductValidateAfter (Varien_Event_Observer $ observer) if ($ this -> _ role-> getIsAll ()) return; $ product = $ observer-> getEvent () -> getProduct (); $ This -> _ forceAssignToWebsite ($ product-> getWebsiteIds ());
Ed ecco una classe di osservatori e il suo metodo. Questa classe e questo metodo sono collegati al sistema usando il sistema di configurazione di Magento. L'evento stesso viene consegnato alla classe osservatore e il prodotto è raggiungibile dall'evento.
Tratterò l'effettiva creazione e l'aggancio degli osservatori oltre a raggiungere i soggetti con maggiori dettagli nel prossimo post.
Uno degli argomenti principali per utilizzare il modello di osservatore o i suoi parenti stretti come il pattern Pub / Sub è la modularità che fornisce.
Poiché qualsiasi cosa può collegarsi a un evento che viene inviato, non si ha mai un forte riferimento ad esso. Ciò è eccezionalmente utile in un'impostazione in cui lavori sempre con moduli che potrebbero o meno fornire servizi a un elemento specifico che potrebbe essere o meno disponibile.
Per utilizzare nuovamente Magento, posso creare un modulo che osserverà le modifiche al prodotto e un modulo che ho creato che attiva i propri eventi personalizzati. Ora, in un sistema normale questo modulo dipende dal modulo precedente, ma usando un Pub / Sub o il Pattern Observer posso rendere questa dipendenza opzionale e applicare solo qualunque sia il mio modulo corrente quando è disponibile.
Dopo questo veloce ripasso su quali sono esattamente i pattern di design e l'aspetto più approfondito di Observer Pattern, nel prossimo post spiegherò come è usato in Magento, come puoi iniziare a usarlo nei tuoi moduli e fornirglieli anche nei propri moduli per collegarsi da altri, o per altri a cui collegarsi.