Cosa è una datamap? #
Una delle specifiche più comuni durante lo sviluppo di applicazioni consiste nel mostrare a video dati provenienti dal database o, più in generale, dal backend.
Quello che può sembrare un compito semplice, in realtà presenta aspetti di complicazione soprattutto nell’ambito delle applicazioni web basate su browser. Facciamo alcuni esempi:
- Sincronizzazione degli elementi visuali al variare dei dati da mostrare.
- Rendering efficace di una grande mole di record.
- Gestione di filtri, raggruppamenti ed ordinamenti dei dati.
- Rendering di strutture multi-livello.
Per risolvere queste problematiche, Instant Developer Cloud contiene un componente speciale chiamato datamap. Una datamap è un controller che, collegato ad una sorgente dati, si occupa di creare e mantenere sincronizzate le strutture di elementi visuali necessarie a mostrarli.
Elenco delle caratteristiche #
Vediamo una lista delle principali caratteristiche gestite dalle datamap:
- Sorgenti dati basate su documenti o collection, su query o su dati caricati in memoria.
- Possibilità di estendere le strutture dati con proprietà unbound a livello di singola datamap.
- Gestione del caricamento dei dati dal database, anche in modalità paginata.
- Gestione di ordinamenti, raggruppamenti e filtri sui dati direttamente in memoria.
- Creazione, aggiornamento e rimozione automatica degli elementi visuali corrispondenti ai dati in funzione di un template fornito alla datamap.
- Stilizzazione degli elementi visuali in funzione dei dati.
- Gestione delle sezioni visuali (intestazioni e piede) per i raggruppamenti.
- Visualizzazione paginata automatica.
- Visualizzazione con finestra dati virtuale automatica.
- Gestione strutture dati innestate a n-livelli.
- Gestione strutture dati ricorsive.
- Gestione del collegamento con elementi visuali per la modifica dei dati.
- Visualizzazione automatica degli errori di validazione.
- Utilizzo di datamap come sorgenti di dati per elementi visuali come combo-box, auto complete, grafici, mappe, calendari, eccetera.
- Ciclo di vita ad eventi per una gestione centralizzata del codice applicativo.
Struttura interna di una datamap #
Nel diagramma seguente possiamo vedere il contenuto schematico di una datamap e il rapporto con gli elementi esterni ad essa.
Nel primo stadio, una datamap gestisce una sorgente dati, nella quale vengono memorizzati i dati da gestire. Tale sorgente dati può essere di tre tipi:
- Dati in memoria: i dati sono contenuti nell’array rows della datamap e vengono caricati dal codice dell’applicazione.
- Dati provenienti da database: la datamap può contenere una query strutturata che specifica come caricare i dati dal database. Il caricamento viene gestito dalle funzioni interne della datamap stessa. Anche in questo caso i dati sono contenuti nell’array rows.
- Dati provenienti da una collection di documenti: la collection può essere gestita direttamente dalla datamap oppure esternamente. In entrambi i casi, l’array rows punta ai dati contenuti nella collection.
Nel secondo stadio, la datamap gestisce un set visuale di dati (array uiRows) che è diverso da quello contenuto nella sorgente dati. I dati possono venire nascosti a causa di un filtro, riordinati o raggruppati, o infine possono essere marcati per la cancellazione e quindi non essere visibili. In tutti questi casi il sistema interno alla datamap mantiene sincronizzato l’array uiRows che rappresenta i dati visibili con rows, la sorgente dati.
Nel terzo stadio la datamap si occupa di generare dei cloni del template fornito e di mappare i dati visibili sugli elementi clonati. La mappatura è bidirezionale in quanto se gli elementi sono modificabili, come ad esempio dei campi di input, allora i dati passeranno dal video alla sorgente.
Tutte le operazioni indicate sono sincronizzate in tutti gli stadi. Se, ad esempio, un documento della collection fornita come sorgente dati viene marcato per la cancellazione, la datamap lo rileva automaticamente, aggiorna l’insieme dei dati visibili rimuovendo i link con il documento in fase di cancellazione e distrugge il clone del template che lo mostrava a video.