Livebase è una piattaforma di sviluppo low-code che offre potenti strumenti di modellazione, generazione di codice e lifecycle management per realizzare da zero applicazioni database gestionali in modo semplice, veloce e sicuro.
Il modello #
Sviluppare unâapplicazione con Livebase vuol dire realizzare un diagramma delle classi UML âspecialeâ, che prende il nome di modello. Esso è un diagramma concettuale che descrive la business logic dellâapplicazione su diversi livelli di astrazione, e che viene tradotto da Livebase non solo in un database, ma anche in tutta la logica applicativa coinvolta nelle letture e scritture dei dati rappresentati.
Nel modello, tutto ruota intorno ai dati: classi, attributi e relazioni definiscono la struttura del dato, mentre altri aspetti - come le form - definiscono la rappresentazione del dato, e altri ancora definiscono i permessi sul dato. PoichÊ sarebbe complicato rappresentare tutte queste informazioni contemporaneamente, il modello è dotato di diverse viste trasparenti, dette schema;
ogni schema consente al modellatore di concentrarsi su uno specifico aspetto dellâapplicazione, senza mai perdere di vista il diagramma delle classi.
Gli schema #
Gli schema piĂš importanti sono di tre tipi: Database Schema , Application Schema e Profile Schema .
Il Database Schema è il cuore del modello. Istruisce Livebase su come generare il database relazionale, descrivendone la struttura concettuale in termini di classi, attributi, relazioni, vincoli dâintegritĂ e restrizioni dei domini dei dati. Il Database Schema è unico e da esso dipendono tutti gli altri livelli della gerarchia.
Gli Application Schema consentono di realizzare il partizionamento del database. Ciascuno di essi gestisce un sotto-dominio del modello, ovvero una selezione di classi, attributi e relazioni; nella vista applicativa che ne risulta, il resto del modello è completamente oscurato e inaccessibile, come se non esistesse. Ă inoltre possibile definire dei filtri per escludere certi oggetti dalla vista e restringere ulteriormente la porzione di database gestita. Gli Application Schema descrivono anche lâaspetto dellâinterfaccia utente e la rappresentazione dei dati.
I Profile Schema descrivono i grant (diritti) che gli utenti con quel profilo hanno nel sistema. Un profilo può essere abilitato o meno ad accedere a un insieme di viste applicative, e per ciascuna vista/Application schema è possibile specificare i diritti di lettura e modifica sugli oggetti resi accessibili dalla vista. Lo schema che consente di configurare questi diritti per la coppia profilo-vista applicativa è detta Permission Schema . Un profilo può inoltre essere abilitato per aspetti generali, come la configurazione del sistema o la gestione degli utenti.
Di default, nei nuovi modelli sono definiti un solo Application Schema (Application) con tutte le classi abilitate, e due Profile Schema: Member e Guest; non essendoci alcun partizionamento, gli utenti hanno accesso a tutto il modello con pieni diritti di lettura e scrittura.
Altri schema che non trattiamo nel tutorial sono i seguenti:
- Localization Schema : definisce le stringhe di localizzazione di tutti gli elementi del modello rispetto a una lingua supportata. Al momento le lingue supportate sono italiano e inglese .
- Report Schema : definisce un template per generare report di vario tipo (tabellare, a campi incrociati, etc.) sui dati del modello.
Il Designer #
Il Designer è lâambiente di modellazione di Livebase; lo useremo per realizzare classi e relazioni e navigare la gerarchia degli schema.
In ogni momento, il Designer controlla ogni modifica che il modellatore effettua e valuta le loro ripercussioni nella gerarchia degli schema; è pertanto virtualmente impossibile disegnare modelli inconsistenti. Questo aspetto è molto importante soprattutto nella manutenzione di modelli pre-esistenti.
Il Designer è uno strumento incluso nella Dashboard, che vediamo a breve. Alla fine del corso avremo esplorato gran parte dei suoi strumenti e funzioni.
Lâapplicazione generata e la Cloudlet #
A partire dal modello, Livebase genera automaticamente tutto lo stack applicativo necessario al corretto funzionamento del sistema, senza richiedere ulteriore configurazione. Nel dettaglio, il risultato della modellazione è:
- un database relazionale (MariaDB), opportunamente normalizzato e ottimizzato;
- un engine applicativo (in linguaggio Java) corredato di servizi di lettura e scrittura sul database, autenticazione, gestione degli utenti e della concorrenza, viste applicative, logging, etc.;
- una API REST tradizionale e una API GraphQL mappate sugli elementi del modello;
- una libreria di interfacce di sviluppo Java mappate sugli elementi del modello per realizzare Plugin.
Tutto questo stack - database incluso - risiede in un server virtuale autonomo che prende il nome di Cloudlet. Una Cloudlet è un sistema multi-utente con un indirizzo URL, che consente di accedere alle sue interfacce; la maggior parte di queste risorse è protetto e richiede autenticazione.
API e Plugin #
Le API generate dal sistema sono due: REST e GraphQL; entrambe vengono mappate sulle risorse dichiarate nel modello, e consentono (previa autenticazione) di interrogare lâapplicazione generata per leggere e scrivere dati, con le stesse politiche modellate nei Profile Schema. In particolare, la API GraphQL offre un linguaggio di interrogazione fortemente tipato per soddisfare query complesse in modo flessibile.
I Plugin sono invece estensioni custom della logica applicativa. Gli sviluppatori possono usare le librerie generate per scrivere Plugin e agganciarli allâengine applicativo; queste estensioni vengono richiamate durante lâesecuzione di alcune operazioni note (come durante il salvataggio di un oggetto), e consentono di eseguire codice arbitrario sfruttando il contesto dâesecuzione dellâapplicazione (come oggetti in memoria, connessioni aperte al database) o altri servizi offerti dal framework dellâengine applicativo.
La Dashboard #
La Dashboard è lâambiente di amministrazione di modelli e Cloudlet. Da qui possiamo aprire il Designer per visualizzare, creare o modificare modelli; possiamo inoltre gestire tutto il ciclo di vita delle Cloudlet: creazione, avvio/arresto e demolizione.
Nella Dashboard, il proprietario di una Cloudlet può:
- gestire i membri, crearne di nuovi e assegnare loro profili utente per accedere allâapplicazione generata;
- gestire le risorse da assegnare alle sue Cloudlet (dimensione del database o del file storage, larghezza di banda, etc.) dal resource pool disponibile per il suo piano;
- gestire il database e il modello corrente.
Di default, Livebase effettua automaticamente il deploy delle nuove Cloudlet sul nostro hosting cloud; Cloudlet dispiegate in questo modo hanno giĂ a disposizione un URL pubblico, nel formato <ServerNumber>.fhoster.com/<AccountName>/<CloudletName>
, dove <AccountName>
è lo username dellâaccount proprietario della Cloudlet.
Flusso di lavoro Livebase #
Per creare da zero unâapplicazione Livebase è sufficiente:
- creare un modello in libreria;
- creare una Cloudlet;
- trascinare il modello sulla Cloudlet per installarlo;
- avviare la Cloudlet.
Livebase genera tutto lo stack applicativo ogni volta la Cloudlet viene avviata con un nuovo modello. Se non è presente un database, anchâesso viene creato da zero. Una volta generato il codice al primo avvio, la Cloudlet può essere arrestata e riavviata piĂš rapidamente.
Ciclo di sviluppo #
In qualunque momento, una Cloudlet in esecuzione può essere arrestata e il suo engine può essere sostituito con un altro modello o aggiornato modificandolo nel Designer. Questa operazione è detta manutenzione evolutiva e rende possibile apportare modifiche a unâapplicazione Livebase esistente minimizzando il rischio di perdere i dati memorizzati nel pre-esistente database.
Lo sviluppo di applicazioni Livebase è quindi un ciclo composto di tre fasi: modellazione, allineamento e rigenerazione:
Quando un modello/engine installato su una Cloudlet viene aperto e modificato nel Designer, Livebase controlla le modifiche effettuate dallâutente tenendo conto della struttura corrente del database e dei dati memorizzati in esso.
Quando lâutente salva le modifiche, Livebase elabora un piano dâintervento per aggiornare database e applicazione individuando e catalogando eventuali disallineamenti con i dati esistenti e la struttura del database:
- se si tratta di cambiamenti di basso impatto (low issue), è possibile riavviare la Cloudlet senza problemi;
- in presenza di disallineamenti che comporterebbero perdite di informazioni (medium issue), Livebase chiede allâutente di rivedere le modifiche e dare conferma esplicita prima di procedere;
- nel caso di problemi ancora piĂš gravi (high issue) che non sono risolvibili automaticamente e che renderebbero i dati pre-esistenti inconsistenti, Livebase impedisce di avviare la Cloudlet e obbliga lâutente a risolvere manualmente gli errori sul Designer.
Concluso lâallineamento col database, è possibile riavviare la Cloudlet. A questo punto, tutte le parti dellâapplicazione coinvolte dalle modifiche vengono rigenerate.
Durante il corso effettueremo numerosi interventi di manutenzione evolutiva e affronteremo tutti i diversi scenari che abbiamo elencato.
Nella prossima lezione⌠#
Descriviamo i requisiti del sistema gestionale che guiderĂ la modellazione: Scenario di esempio.