Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Both sides previous revision Previous revision Next revision | Previous revision | ||
gli_eventi [28/05/2010 11:22] |
gli_eventi [31/01/2017 11:33] (versione attuale) Massimo Colombi |
||
---|---|---|---|
Linea 3: | Linea 3: | ||
**Introduzione**\\ | **Introduzione**\\ | ||
\\ | \\ | ||
- | OpenDCN è una piattaforma costituita da moduli che interagiscono tra di loro attraverso il sistema degli eventi.\\ | + | openDCN è una piattaforma costituita da moduli che necessitano di scambiarsi informazioni; questo scambio è controllato e gestito tramite il “sistema degli eventi”. Possiamo considerare “Evento” un qualsiasi cambiamento che si verifica nel Sistema. \\ |
- | Ogni modulo compie le proprie funzioni solo al determinarsi di uno o più eventi, in questo modo si forma un metodo di lavoro secondo il quale si può conservare la modularità del sistema, con la possibilità di implementare nuove funzioni senza dover modificare la struttura già esistente.\\ | + | |
- | + | ||
- | Il pattern di riferimento per la gestione degli eventi si chiama “[[http://www.mach-ii.com/resources/intro_to_implicit_invocation.pdf |Implicit invocation]]”: ogni controller è registrato come "listener", ovvero colui che aspetta il verificarsi di un'azione/evento alla quale risponde con un'altra azione.\\ | + | |
- | In questo modo il singolo controller non è a conoscenza di ciò che accade a livello generale, ma risponde solo ad una specifica richiesta invocata da un altro controller.\\ | + | |
\\ | \\ | ||
+ | Ogni modulo compie specifiche azioni solo al verificarsi di uno o più determinati eventi, in questo modo si forma un metodo di lavoro basato sulla modularità, nel senso che, come in una reazione a catena, non c’è conseguenza se non si scatena la causa.\\ | ||
+ | Grazie a questo meccanismo, la piattaforma gode di una struttura modulare, facilmente modellabile, in quanto ogni singolo controller non è a conoscenza di ciò che accade a livello generale, ma risponde solo ad una specifica richiesta invocata da un altro controller e questo permette di implementare nuove funzioni senza dover modificare la struttura esistente.\\ | ||
+ | \\ | ||
+ | Il pattern di riferimento per la gestione degli eventi si chiama “Implicit invocation”: ogni controller è registrato come “listener”, ovvero colui che aspetta il verificarsi di un'azione/evento alla quale risponde con un'altra azione. | ||
+ | |||
**La gestione in openDCN**\\ | **La gestione in openDCN**\\ | ||
\\ | \\ | ||
Linea 63: | Linea 64: | ||
… | … | ||
\\ | \\ | ||
+ | |||
---- | ---- | ||
\\ | \\ | ||
- | **ESEMPIO n°2**:\\ | + | **Elenco di tutti gli eventi sino ad ora registrati**:\\ |
- | \\ | + | |
- | Se la nostra applicazione avesse differenti controller che rappresentano la logica di localizzazione di diversi tipi di dati (Case, Hotel, etc.) e noi volessimo visualizzare tutti questi dati su una sola mappa, sarebbe sufficiente registrare ogni controller sopramenzionato all’evento Locations.showOnMapKml.\\ | + | |
- | Nel nostro esempio, fra le altre, nel file XML di uno dei controller listener (per esempio quello che rappresenta la localizzazione degli Hotel) troveremmo la seguente entry:\\ | + | |
- | \\ | + | |
- | <handlers> | + | |
- | ... | + | |
- | <handler name="showLocationKml" event="Location.showOnMapKml"/> | + | |
- | ... | + | |
- | </handlers> | + | |
- | \\ | + | |
- | Per poter visualizzare la mappa, e quindi per cercare tutti i dati in una sola volta, non rimane che scatenare l’evento //Location.showOnMapKml// all’interno del controller principale della mappa attraverso la seguente notifica:\\ | + | |
- | \\ | + | |
- | ... | + | |
- | $items = $this->notify('Location.showOnMapKml'); | + | |
- | ... | + | |
- | \\ | + | |
- | A questo punto tutti i listener risponderanno a questo evento con un vettore contenente le locazioni e dati ulteriori che possiamo visualizzare immediatamente sulla mappa.\\ | + | |
- | \\ | + | |
- | ---- | + | |
- | \\ | + | |
- | **Elenco di tutti gli eventi sino ad ora registrati (v.1.5)**:\\ | + | |
\\ | \\ | ||
^ EVENTO ^ MODULO che RISPONDE ^ DESCRIZIONE ^ | ^ EVENTO ^ MODULO che RISPONDE ^ DESCRIZIONE ^ | ||
- | | Menu.registerMenuItem | content; event; users | Risponde con l'elenco dei propri oggetti presenti nel menu | | + | | Groups.addUser | notifications | Notifica l'inserimento di un utente dal gruppo | |
+ | | Groups.removeUser | notifications | Notifica la rimozione id un utente dal gruppo | | ||
| Blockset.blocksMap | locations; posts; menu; notifications; content; agenda | Risponde con un array contenente le caratteristiche dell'istanza del controller che risponde | | | Blockset.blocksMap | locations; posts; menu; notifications; content; agenda | Risponde con un array contenente le caratteristiche dell'istanza del controller che risponde | | ||
| Permissions.getSubjects | users; groups | Risponde con la lista dei soggetti che hanno permessi di compiere azioni sul modulo che chiama l'evento | | | Permissions.getSubjects | users; groups | Risponde con la lista dei soggetti che hanno permessi di compiere azioni sul modulo che chiama l'evento | | ||
Linea 98: | Linea 80: | ||
| Locations.legenda | posts; agenda | Risponde ritornando la legenda utile alla visualizzazione | | | Locations.legenda | posts; agenda | Risponde ritornando la legenda utile alla visualizzazione | | ||
| Users.delete | posts; infodiscs; light_poll | Risponde con la cancellazione di un utente | | | Users.delete | posts; infodiscs; light_poll | Risponde con la cancellazione di un utente | | ||
+ | | Users.insert | posts; infodiscs; light_poll | Notifica l'inserimento di un utente | | ||
| Agenda.callForTools | polls; meeting; infodiscs; lightpoll | Risponde con un array contenente le informazioni sul proprio strumento per permettere al modulo chiamante di operare | | | Agenda.callForTools | polls; meeting; infodiscs; lightpoll | Risponde con un array contenente le informazioni sul proprio strumento per permettere al modulo chiamante di operare | | ||
| Tools.whoIsMyParent | users; agenda | Risponde con un array contenente la tipologia del proprio strumento, il titolo e il path di riferimento | | | Tools.whoIsMyParent | users; agenda | Risponde con un array contenente la tipologia del proprio strumento, il titolo e il path di riferimento | | ||
Linea 103: | Linea 86: | ||
| Tools.whoIsOfASpecies | agenda | Risponde con un array contenente la tipologia di ogni agenda attiva | | | Tools.whoIsOfASpecies | agenda | Risponde con un array contenente la tipologia di ogni agenda attiva | | ||
| Notifications.info | posts; infodiscs| Risponde con le informazioni sulle notifiche fatte sul proprio modulo | | | Notifications.info | posts; infodiscs| Risponde con le informazioni sulle notifiche fatte sul proprio modulo | | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | [[smarty, le viste e opendcn | indietro]] - [[le api | avanti]] | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ |