Visus RAD

Sistema informativo agile
Ambiente di sviluppo rapido model-driven


Visus RAD

 

La digitalizzazione delle informazioni e dei processi è uno dei principali strumenti per la buona gestione di una moderna attività.
La sua realizzazione è un’operazione tecnicamente complessa, onerosa e con un elevato rischio di fallimento.

VISUS RAD è una piattaforma pensata per semplificare e velocizzare la realizzazione di questo obiettivo.
Permette di definire in tempi minimi un prototipo funzionante dal quale si arriva rapidamente e gradualmente al sistema completo.
E’ ideale anche nell’integrazione, nell‘evoluzione e nella migrazione di sistemi già esistenti.

L’approccio previsto non pone al centro del sistema le singole applicazioni pensate per risolvere singoli problemi ma l’insieme delle informazioni e dei processi concepiti come sistema organico complessivo ed unitario.
Non richiede la scrittura di codice con linguaggi di sviluppo tradizionali: consente di lavorare ad un livello di astrazione superiore, distogliendo l’attenzione dagli innumerevoli dettagli e problemi della programmazione e delle tecnologie, concentrandosi sugli aspetti funzionali, vero oggetto dell’attività di sviluppo.

Il sistema si basa sulla definizione di un modello logico con il quale si forniscono informazioni relative ai dati e ai processi da informatizzare.
Il sistema, in tempo reale e in modo automatico, interpreta il modello e ‘produce’ una soluzione rispondente alle specifiche espresse.

Questo particolare ed originale approccio consente di ottenere notevoli vantaggi:

  • riduce drasticamente la complessità di sviluppo a vantaggio di semplicità, rapidità ed economicità;
  • non richiede competenze tecnico-informatiche avanzate privilegiando e valorizzando la conoscenza dell’ambito e dei temi oggetto della digitalizzazione;
  • razionalizza il sistema informativo, ponendo al centro le informazioni e i processi, consentendo di ‘ripulirlo’ dalla miriade di piccole e grandi ‘applicazioni’ che lo irrigidiscono;
  • consente un’integrazione indolore e a posteriori di nuove funzionalità e nuove tecnologie;

 

Grazie a Visus RAD sono state realizzate decine di applicazioni in modo rapido ed economico; diverse aziende lo hanno adottato come principale strumento di sviluppo e integrazione del loro sistema informativo.
Consulta la sezione Referenze.

 

CaratteristicheVantaggiFunzioniConsiderazioni Tecniche
  • Produzione della soluzione senza scrittura di codice in linguaggi di programmazione tradizionali ma esclusivamente tramite la definizione di un modello;
  • Soluzioni rese in tecnologia WEB adatte a tutti i browser, in versione desktop e mobile;
  • Acesso a moltplici tipologie di dati:
    Database Relazionali, WebServices, File System, IBM/Lotus Domino, Flussi CSV e XML, SMTP/POP, RSS, SNMP, ModBUS, MQTT, ecc.;
  • Insieme completo di funzionalità sui dati:
    inserimento, modifica, cancellazione, ordinamento, filtro, raggruppamento, stampa, esportazione (CSV, XML, PDF, Excel, JSon);
  • Insieme completo di azioni eseguibili manualmente, in base a trigger applicativi o con schedulazione temporale:
    comandi SQL, esecuzione di Stored Procedure, esecuzione di comandi del sistema operativo, esecuzione di codice JAVA, importazione/esportazione di flussi, invio/ricezione di mail;
  • Gestione di Workflow definibili dinamicamente dall’utente;
  • Gestione di dati temporali tramite viste ‘Calendario’;
  • Generazione di diagrammi e tabelle pivot;
  • Georeferenziazione;
  • Autenticazione e autorizzazione basata su ruoli con controllo dell’accesso fino al singolo campo, integrabile al contesto aziendale (LDAP, JAAS);

 

Semplifica e velocizza lo sviluppo e la manutenzione delle applicazioni, senza scrivere codice;

  • è un sistema dichiarativo che richiede la semplice definizione di un modello, cioè di come e dove sono i dati, delle loro relazioni e delle regole per utilizzarli;
  • riduce drasticamente la complessità separando e ‘nascondendo’ le tecnologie utilizzate, evitandone la conoscenza diretta e rendendole intercambiabili;
  • consente di realizzare, in poche decine di minuti, prototipi perfettamente funzionanti che con pochi ritocchi, progressivamente, diventano applicazioni definitive;
  • può essere utilizzato anche da persone senza una specifica preparazione allo sviluppo ma piuttosto e più utilmente con competenze relative alle materie oggetto delle applicazioni.

 

Migliora la gestione del ciclo di vita delle applicazioni e le attività del team di sviluppo;

  • non è un generatore di codice statico ma un interprete dinamico di applicazioni: in altre parole non alimenta la crescita incontrollata del codice e i relativi problemi di gestione;
  • è un ambiente ideale per l’utilizzo delle metodologie ‘agili’, consentendo un processo di sviluppo molto dinamico, rapido e progressivo;
  • mantiene separati la logica applicativa dalla forma di presentazione consentendo di lavorare su una parte senza interferire sull’altra;
  • consente il riutilizzo dei moduli sviluppati;
  • è auto-documentante: l’essenzialità e la chiarezza dei costrutti è di comprensione immediata e costituisce già di per sé un documento di specifica completo;
  • oltre ad essere uno strumento di lavoro è una metodologia che applicando i concetti della generalizzazione dei problemi, della costruzione modulare e dell’uso di pochi paradigmi generali utilizzati in molti e differenti contesti, indirizza lo sviluppatore verso un modo di lavorare virtuoso, più semplice e lineare.

 

Consente la razionalizzazione del sistema informativo;

  • è complementare, non alternativo, ai sistemi informativi esistenti permettendo di integrarli facilmente con le funzionalità mancanti;
  • permette di migrare applicazioni obsolete o non più gestibili, gradualmente e mantenendone le strutture dati;
  • le applicazioni prodotte sono tra loro omogenee e coerenti, ed offrono un insieme di funzionalità generali completo e trasversale;
  • le diverse applicazioni costituiscono nel loro insieme un sistema unitario ed integrato che cresce e si sviluppa nel tempo.
  • aggiunge al sistema informativo funzioni di amministrazione applicativa: blocco di aree applicative, monitoraggio degli utenti e della rispettiva ‘posizione’ all’interno dell’applicazione, analisi dell’utilizzo orario, monitoraggio e notifica degli errori;

 

Rende accessibili informazioni di diversa origine, tipologia e localizzazione, adattandosi al contesto nel quale è calato;

  • consente di accedere a database, file-system, mail server, web services, feed RSS, pagine web ed eventualmente anche applicativi specifici;
  • non richiede esportazioni/importazioni di dati e relativi aggiornamenti; le informazioni sono lette e aggiornate direttamente alla fonte, quando necessario;
  • le applicazioni possono accedere simultaneamente a molteplici fonti di dati e, stabilendo delle relazioni tra esse, realizzare una ‘integrazione’ applicativa dei dati.

 

Permette l’utilizzo di molteplici dispositivi in differenti scenari;

  • è adattivo: la medesima applicazione ‘risponde’ ai differenti dispositivi (personal computer, smartphone, tablet) adattandosi alle relative capacità, sfruttandone le funzionalità supportate e limitando quelle mancanti;
  • esistono diverse versioni che, a partire dal medesimo modello, consentono di ottenere piattaforme applicative adatte ai vari scenari di utilizzo.

 

Ha un’architettura tecnologica aperta e in continua evoluzione;

  • è pensato per arricchirsi in modo continuo di nuove possibilità (funzioni applicative, tipologie di dati, paradigmi di accesso, dispositivi di fruizione delle applicazioni) e per incorporare progressivamente le tecnologie che nel tempo si rendono disponibili: essendoci la totale separazione tra l’applicazione (o meglio il suo modello) e l’interprete che rende le applicazioni, quest’ultimo può essere corretto, migliorato e integrato con nuove funzionalità e tecnologie che possono essere, immediatamente e con minimo sforzo, acquisite non solo dalle nuove applicazioni ma anche da tutte quelle precedentemente sviluppate;
  • si basa su tecnologie e protocolli standard, preferibilmente non proprietari e open: tale scelta garantisce elevata qualità, apertura e minimizzazione dei costi;
  • è multi piattaforma (funziona su tutti i sistemi operativi), si adatta ai diversi ambienti infrastrutturali e necessita di requisiti hardware e di sistema minimi;
  • è customizzabile ed integrabile con altri sistemi;
  • può essere utilizzato come strumento di sviluppo per CED aziendali, software house, sviluppatori indipendenti o come componente tecnologica di base per singoli progetti.

Tipologie di dati accessibili e manipolabili

Database relazionali (accesso tramite driver JDBC e DataSource via JNDI)
Web Services
IBM Lotus Domino (accesso diretto e tramite IIOP/CORBA)
File-System
Flussi XML, CSV, delimitati, a lunghezza fissa
e-Mail
Feed RSS
Pagine Web HTML
Immagini
SNMP, ModBUS, MQTT

Navigazione e usabilità 

Struttura applicativa e menu di accesso generati automaticamente e dinamicamente
Funzioni di navigazione generali (Home, login, logout, percorso e posizione corrente nella struttura applicativa, link di accesso diretto)
Tooltip di aiuto su tutte le funzioni
Rappresentazione dei dati secondo il paradigma ‘testata-righe’ (Parent-Child), applicabile ad un numero illimitato di livelli
Navigazione di dati eterogenei, relazionati sulla base di elementi comuni, secondo il paradigma Parent-Child
Navigazione dei dati in modalità lista (List) e scheda (Form)
Navigazione dei dati in modalità lista con scorrimento verticale a ‘pagine’ e orizzontale a ‘pannelli’
Navigazione dei dati in modalità ‘sincronizzata’ con lista e scheda simultanee
Navigazione dei dati in modalità ‘lista espandibile’ con Parent e Child simultanei
Navigazione dei dati in modalità ‘record singolo’
Navigazione dei dati in modalità ‘albero’ (Tree) con record di una medesima tabella visti come Parent e Childricorsivi
Navigazione dei dati in modalità ‘calendario’ (vi veda la sezione ‘Dati temporali e Calendario’)
List visualizzabile secondo viste (View) multiple;
View ‘dinamiche’ generate in base ai valori presenti nei record;
Form visualizzabile in blocchi (Block) di campi (Pagine, Colonne, Gruppi, Gruppi espandibili)
Riga di totalizzazione (con conteggio, somma, media, minimo e massimo)
Funzione di filtro/ricerca dati generata automaticamente e con indicazione ‘descrittiva’ dell’eventuale presenza
Colonne della List ordinabili mono e bi-direzionalmente
Funzioni di gestione dei dati (inserimento, modifica, ecc.) accessibili con menu e toolbar contestuali
Editing dei dati avanzato (si veda la sezione ‘Editing dei dati’)
Gestione avanzata della cache del Browser

Editing dei dati

Form ‘dinamiche’ con accesso ai campi condizionato da regole e dai dati inseriti dall’utente
Campi vincolati (valori scelti da una lista) definibili staticamente (nella definizone) o dinamicamente (dai dati), selezionabili con vari metodi (‘radio button’, ‘combo box’, ‘picker’)
Campi multi valore (liste di valori, con personalizzazione del modo di rappresentazione all’utente e di inserimento nel Database)
Condizionamento dei valori inseribili in un campo vincolato in base al valore di altri campi
Campi Si/No (con personalizzazione del modo di rappresentazione all’utente e di inserimento nel Database)
Campi HTML con editor avanzato
Campi WiKi
Campi basati su formule, calcolati automaticamente o manualmente a richiesta
Inserimento tramite ‘picker’ di dati referenziati con ricerca
Inserimento tramite ‘picker’ di date con navigazione calendario
Inserimento tramite ‘picker’ di riferimenti a file con navigazione del file system
Inserimento tramite ‘picker’ di riferimenti a immagini con navigazione del file system e preview dell’immagine
Inserimento tramite ‘picker’ di colori con tavolozza e preview del colore
Gestione del valore ‘NULL’
Possibilità di inserire nuovi dati eventualmente mancanti direttamente dal ‘picker’
Controlli automatici sull’obbligatorietà di un dato con evidenziazione
Controlli automatici sul formato dei dati
Tooltip di aiuto/spiegazione sui campi
Riproposizione dei dati inseriti per nuovo inserimento
Modifica di insiemi di record in modalità griglia (Grid) per righe o per colonne
Inserimento rapido con modalità ‘catalogo/carrello’
Avviso di uscita dalla Form con dati modificati senza salvataggio

Manipolazione dei  dati

Esecuzione della medesima manipolazione su singole Form, su intere List in base ai criteri impostati dall’utente (View, ordinamento, filtraggio) o sui record selezionati dall’utente
Manipolazioni orientate ai Database tramite query SQL o esecuzione di Stored Procedure
Manipolazioni orientate ai File tramite generazione dinamica ed esecuzione di command script (definiti con i comandi del sistema operativo ospite)
Configurazione di tutte le manipolazioni come ‘Trigger’ scatenati dalle funzioni di gestione dati (Inserimento, Modifica, Cancellazione)
Configurazione di tutte le manipolazioni in modalità temporizzata (asincrona ed indipendente dagli utenti)
Crittazione e Decrittazione di dati
Accesso a pagine WEB basato su indirizzo URL generato dinamicamente sulla base dei dati
Generazione di documenti elettronici (si veda la sezione ’ Generazione di Documenti elettronici’)
Invio e ricezione di e-mail (si veda la sezione ’e-Mail’)
Indicazione dello stato di avanzamento delle procedure di lunga durata

Analisi – OLAP

Raggruppamento dei dati secondo criteri definiti dall’utente ed esplorazione della composizione (Drill-down)
Generazione dinamica e automatica del modello multidimensionale e della query MDX per OLAP (Mondrian/JPivot)

Gestione Utenti e Diritti di accesso

Definizione utenti in modo statico (nel modello) o dinamico tramite Database, LDAP o interfaccia JAAS
Autenticazione con inserimento credenziali tramite ‘Basic Authentication’, ‘Form Authentication’ e Cookie
Autorizzazione tramite ‘ruoli’
Meccanismo di accesso basato sui ‘ruoli’ dell’utente, applicabile a tutti i livelli ‘statici’ della struttura applicativa (intera applicazione, sezione, pagina, tabella e campo di database)
Meccanismo di accesso ai dati basato sui ‘ruoli’ dell’utente, applicabile in termini di visibilità e modificabilità dei dati, anche in modo dipendente dai dati stessi (tabella e record di database)
Monitoraggio utenti connessi
Funzioni di cambio password e modifica informazioni utente
Variabili applicative specifiche per utente

Generazione di Documenti e Flussi elettronici

Documenti basati su template in formato XML
Documenti basati su template in formato RTF (Rich Text Format) (adatto a OpenOffice/MS Word)
Documenti basati su template in formato PDF
Documenti HTML in formato ‘stampabile’
Report in formato PDF
Flussi in formato XML
Flussi in formato CSV (Comma Separed Value) e ‘delimitato’ (adatto a OpenOffice, MS Excel)
Flussi in formato a ‘lunghezza fissa’
Flussi in formato Microsoft Excel

e-Mail

Invio con generazione dinamica sulla base dei dati
Invio in formato testo o HTML
Invio basato su template
Invio dei file allegati
Invio diretto al destinatario senza relay SMTP
Ricezione da molteplici mail box POP3
Mantenimento o eliminazione dalla mail box delle e-mail ricevute
Importazione in Database delle e-mail ricevute
Ricezione degli allegati e scrittura su file system in struttura adeguata e personalizzabile
Ricezione ‘selettiva’ delle singole parti del messaggio (intestazioni, mittente, destinatario, corpo, allegati, ecc)

Dati temporali e Calendario

Rappresentazione e navigazione di dati temporali in modalità Calendario con molteplici View (Giorno, Settimana, Mese, Anno)
Eventi ripetitivi (1)

Workflow e processi 

Definizione tramite XML
Modello di definizione basato su ‘stati’, ‘attività’ e ‘ruoli’
Interpretazione del modello in tempo reale
Selezione automatica dei dati ‘destinati’ all’utente
Proposta automatica delle viste e delle ‘attività’ disponibili basata sullo ‘stato’ corrente del dato e sull’utente
Tooltip di aiuto/spiegazione sulle ‘attività’ disponibili e sugli ‘stati’ del dato
Logging dettagliato, con utente, ora e transizione dei passaggi di ‘stato’
Rappresentazione grafica tramite grafo dei flussi

SOA/WebServices

Pubblicazione automatica di WebServices per la richiesta di tutte le funzioni applicative possibili, in modalità SOAP e REST
Pubblicazione automatica delle definizione WSDL per tutti i WebServices pubblicati
Accesso a WebServices esterni
Strumento di esplorazione e interrogazione di WebServices esterni

Accesso a servizi informativi esterni

Invio e ricezione di e-mail (si veda la sezione ’e-Mail’)
Ricezione e importazione in Database da Feed RSS
Geocodifica di indirizzi in coordinate geografiche tramite ‘GoogleMaps’
Accesso a WebServices esterni (si veda la sezione ‘SOA/WebServices’)

Grafica 

Generazione dinamica basata sui dati (dati di origine), sull’utente (diritti di accesso) e sui criteri applicati dall’utente (View, ordinamento, filtraggio)
Link sull’elemento grafico verso il dato di origine
Tooltip sull’elemento grafico contenente i dati di origine
Scelta della modalità di visualizzazione (interfaccia grafica, List dei dati di origine o entrambi)
Scelta della dimensione dell’interfaccia grafica (piccola, media, grande)
Utilizzo, per tutte le rappresentazioni grafiche, del formato vettoriale scalabile SVG (Scalable Vector Graphic)
Rappresentazione e navigazione con interfaccia grafica di dati con struttura ad albero
Rappresentazione e navigazione con interfaccia grafica di dati relativi a stati e condizioni
Rappresentazione e navigazione di immagini (si veda la sezione ‘Immagini’)
Rappresentazione e navigazione con interfaccia grafica di diagrammi (si veda la sezione ‘Diagrammi’)
Rappresentazione e navigazione con interfaccia cartografica (si veda la sezione ‘Cartografia’)
Rappresentazione con interfaccia grafica di Workflow (si veda la sezione ‘Workflow e Processi’)

Immagini

Gestione completa di file immagine collegati a record di Database
Gestione completa di file immagine da File System
Visualizzazione di file immagine con possibilità di riduzione/ingrandimento e ingrandimento a dimensioni originali

Diagrammi 

Tutte le caratteristiche generali della gestione Grafica (si veda la sezione ’Grafica’)
Rappresentazione e navigazione con interfaccia grafica di diagrammi a barre, a linee, a punti e a torta

Cartografia

Tutte le caratteristiche generali della gestione Grafica (si veda la sezione ’Grafica’)
Rappresentazione e navigazione con interfaccia grafica nativa di dati georeferenziati
Rappresentazione e navigazione con interfaccia grafica ‘GoogleMaps’ di dati georeferenziati
Geocodifica di indirizzi in coordinate geografiche tramite ‘GoogleMaps’

Aspetto e Stile

Aspetto dell’applicazione completamente separato dalla logica applicativa, interamente ed unicamente definito tramite CSS (fogli stile)
CSS generalizzati intercambiabili tra applicazioni
Possibilità di specificare un CSS posizionale specifico per ogni ‘Form’
List con righe bicolore alternate
List con cursore riga corrente

Multilinguismo

Gestione di un numero illimitato di lingue
Gestione del multilinguismo per elementi statici (titoli, etichette, suggerimenti, messaggi, ecc.) e per dati
Definizione delle lingue separata dalla logica applicativa
Molteplici criteri di selezione della lingua: manuale, basata sulla lingua del Browser o su variabili applicative specifiche dell’utente
Interfaccia interattiva guidata per l’inserimento dei termini nelle varie lingue
Gestione di multilinguismo parziale e asimmetrico

Dispositivi multipli

Generazione dell’applicazione in modalità adatta a molteplici e differenti dispositivi (PC, Spartphone, Cellulari)
Versione specifica ridotta (VisusPersonal, Woff) per Smartphone
Sincronizzazione dei dati tra Database lato server e Database locale dell’applicazione stand-alone (2)

Gestione Licenze

Abilitazione delle applicazioni prodotte basata su certificato di licenza digitale
Sistema per la creazione di licenze digitali per sub-licenziatari
Sistema di abilitazione dell’applicazione mediante processo di richiesta/concessione licenza via e-mail

Ambiente e Strumenti

Ambiente completamente Web-based
Generazione automatica dell’applicazione (VisusScript) a partire dal Database
Modifica delle impostazioni di generazione (Setting) con interfaccia utente e a run-time
Pannello di stato generale del sistema
Rappresentazione con interfaccia grafica di grafi della strutture applicativa
Rappresentazione con interfaccia grafica dell’accessibilità a livello di Ruolo e Utente
Rappresentazione con interfaccia grafica di grafi della strutture di Workflow
Trace di debug per molteplici parametri di esecuzione
Messaggi di Warning per anomalie e utilizzo di funzioni deprecate
Toolbar e Menu di sviluppo per accesso rapido e contestuale agli strumenti
Monitoraggio e Log degli Utenti connessi
Log delle query SQL
Console di esecuzione comandi e query SQL
Strumento per la normalizzazione di tabelle non in forma normale
Log degli errori
Notifica degli errori via e-mail
Compilazione interattiva del manuale/Help on line e generazione automatica dello stesso

(1) Funzionalità disponibile parzialmente, attualmente in fase di ulteriore sviluppo.

(2) Funzionalità disponibile a breve, attualmente in fase di sviluppo.

 

Qui di seguito sono esposte varie considerazioni tecniche che hanno portato alla realizzazione di VISUS; sono concetti non esposti in maniera organica utili ad agevolare la comprensione e ad offrire spunti di riflessione.

 

La dicotomia delle competenze

Uno dei problemi più frequenti nell’affrontare un progetto software è dato dalla necessità di avere competenze in due aree della conoscenza molto diverse: la materia specifica oggetto del progetto e le tecniche di sviluppo software.

Normalmente, queste diverse conoscenze, sono possedute da persone distinte, spesso anche più di due.

Una delle principali cause di questa situazione è la sempre maggiore complessità delle tecniche di sviluppo software: uno sviluppatore competente e aggiornato per essere tale finisce per concentrarsi totalmente in quest’ambito tralasciando – non rararmente in modo volontario – ogni altra conoscenza.

Anche lo stereotipo che vuole i migliori tecnici avere scarsa attitudine ai rapporti interpersonali, sopratutto verso gli utenti finali, ha probabilmente un fondo di verità: la dedizione che la tecnica pretende richiede personalità con caratteristiche ‘speciali’.

All’estremo opposto, chi meglio conosce la realtà e le problematiche oggetto dei progetti software, che ha una chiara visione delle finalità del progetto e dell’ambiente nel quale sarà calato, e che quindi avrebbe tutti i titoli per condurlo, solitamente non possiede le conoscenze tecniche necessarie.

Questa dicotomia obbliga ad un continuo scambio di informazioni con conseguenti inevitabili incomprensioni, rimpalli di responsabilità, reciproca frustrazione e a volte, fallimento del progetto.

E’ necessario che le tecniche di sviluppo software evolvano in modo tale da non essere più appannaggio di una ‘casta’ di tecno-esperti, ma strumento produttivo nelle mani di chi conosce ed affronta direttamente le problematiche reali.

 

L’Applicazione generalizzata

Generalizzando possiamo affermare che un’applicazione non è altro che la possibilità di interagire con la rappresentazione virtuale di una porzione di realtà di nostro interesse; in concreto è la possibilità di accedere e manipolare dati strutturati e relazionati secondo un modello, più o meno preciso, di quella realtà.

Solitamente, sempre generalizzando, la complessità di un’applicazione si manifesta nella sua ampiezza, cioè nella quantità e nella varietà delle informazioni che rappresenta e gestisce piuttosto che nell’originalità delle manipolazioni che queste informazioni devono subire.

Tali manipolazioni, per quanto varie, comunemente si riducono a poche elementari operazioni: inserimento, visualizzazione, modifica, cancellazione (le cosiddette operazioni CRUD), ordinamento, raggruppamento, ricerca, stampa, importazione ed esportazione.

Oltre a queste esistono altre operazioni più specifiche, legate alla natura dell’applicazione, assimilabili al concetto diprocesso, cioè ad una trasformazione di dati, più o meno controllata dall’utente.

Anche la modalità con la quale l’utente percepisce ed interagisce con le informazioni è riducibile a pochi paradigmi ben definiti: tabella, scheda, campo, azione.

 

Schematizzando un’applicazione generalizzata è composta dai seguenti elementi:

  • i dati, le loro relazioni e le loro regole di validità e coerenza: sono il modello della porzione di realtà oggetto dell’applicazione;
  • una serie di operazioni comuni di base per la gestione dei dati;
  • la possibilità di eseguire interrogazioni sui dati secondo vari criteri predefiniti e liberi;
  • una serie di operazioni di processo/trasformazione dei dati;
  • un’interfaccia utente in grado di rappresentare i dati, secondo vari paradigmi, che ci consente di operare su di essi;

Vale anche in questo caso la nota regola 80/20, cioè la maggior parte delle applicazioni necessita di poche funzioni comuni, le funzioni particolari servono a relativamente poche applicazioni.

In virtù di queste considerazioni possiamo adottare nei confronti delle applicazioni da realizzare un approccio altrettanto generalizzato.
Naturalmente il risultato in tal modo ottenuto sarà un compromesso.
Questo approccio offre indubbi vantaggi ma ovviamente è portatore anche di alcune limitazioni.
La principale consiste nella mancanza di una libertà completa nella realizzazione dell’applicazione: ciò che è possibile fare deve rientrare in un ventaglio di possibilità previste che per quanto ampio è comunque finito.
L’obbiettivo non è fare tutto, nel migliore dei modi, ma fare molto, in maniera soddisfacente (e con vari altri vantaggi).
Alcune applicazioni, per specificità o singolarità, sono poco adatte a questo approccio e lo sforzo necessario ad ottenere il risultato potrebbe essere superiore ai vantaggi derivanti dall’uso di questo approccio.

 

Il disaccoppiamento

Ai due estremi di un’applicazione software si trovano da una parte i dati e dall’altra gli utenti.
Concretamente essa viene realizzata utilizzando varie tecnologie che la permeano completamente: dal lato dei dati per consentirne l’accesso (driver per database, librerie per web services, ecc.), dal lato dell’utente per la fruizione attraverso i dispositivi (HTML, Client Desktop, Rich Client, ecc.) e nel mezzo per l’implementazione del sistema vero e proprio (Servlet/JSP, ASP, RPC, ecc.).
Con gli approcci tradizionali l’implementazione dei vari componenti, la struttura dei dati, le tecnologie scelte e le specificità dei dispositivi sui quali si opererà sono mescolate assieme dando luogo ad una costruzione intricata e complessa che ha necessità di ampie ed approfondite competenze per la sua realizzazione e il suo mantenimento.
Qualsiasi modifica in uno dei componenti, nei dati o nella tecnologia ha impatto su tutto il resto.

Grazie al disaccoppiamento, cioè facendo in modo che questi elementi siano separati ed indipendenti, si ottiene una notevole riduzione della complessità:

  • il modello dei dati è indipendente dall’implementazione: ampie parti di applicazione (le operazioni comuni, le interrogazioni libere, l’interfacca utente) diventano neutre rispetto ai dati e non dovranno essere ogni volta nuovamente sviluppate;
  • le tecnologie diventano intercambiabili;
  • le competenze necessarie sono nettamente inferiori;

Il disaccoppiamento è il principio sul quale si basano anche i framework applicativi.

Un ulteriore aspetto importante riguarda la definizione del modello.
Nei sistemi tradizionali la definizione è realizzata utilizzando la tecnologia di implementazione stessa cioè il linguaggio di programmazione.
Benchè tale linguaggio il più delle volte sia object-oriented e quindi adatto alla realizzazione di modelli, risulta comunque non ideale a questo scopo e comporta in ogni caso un’implementazione a tutti gli effetti.
Anche in vari sistemi basati sui modelli sebbene il modello di partenza sia espresso con sistemi appositi – dichiarativi e non implementativi – il processo di sviluppo, grazie ad apposite trasformazione, mira ad un modello implementato.
Utilizzare direttamente un modello neutro (non implementato) consente un’ulteriore riduzione di complessità e un ulteriore maggiore disaccoppiamento dalla tecnologia implementativa.

 

Relazione con le attuali tendenze dello sviluppo software

Da un punto di vista metodologico

VISUS appartiene alla categoria dei sistemi MDD (Model-Driven Development) cioè di quei sistemi che mirano a produrre il codice non manualmente ma basandosi su di un modello che descrive ciò che si vuole implementare.
VisusScript ne è il relativo DSL (Domain Specific Language) cioè la particolare notazione utilizzata per definire il modello.
VISUS, a differenza di molti sistemi MDD, non è un generatore di codice ma un interprete di modelli: non genera codice sorgente in modo automatico o assistito ma, interpretando il modello, ‘rende’ l’applicazione.
Grazie a questo approccio il modello astratto diviene un modello concreto, direttamente eseguibile.
Il passaggio dal modello all’applicazione, che di norma prevede diverse trasformazioni, scelte tecnologiche e interventi di codifica manuale, non è più nemmeno un processo ma diventa un unico evento realizzato in tempo reale.
Tutte le correzioni, gli adattamenti le integrazioni vengono effettuati unicamente sul modello.

Da un punto di vista architetturale

La gran parte degli attualmente diffusi framework applicativi si basa sul cosiddetto pattern MVC (Model-View-Controller) nel quale si utilizzano varie tecnologie per realizzare le tre componenti principali del sistema:

Controller: è il nucleo del sistema che riceve le richieste e fornisce le risposte ottenendole dalle altre componenti;

Model: è la logica applicativa realizzata in genere utilizzando un linguaggio ad oggetti e modellando con esso la maggior parte della logica applicativa;

View: è la parte di presentazione realizzata con varie tecniche dipendenti dal dispositivo che si utilizza per eseguire l’applicazione.

Vi è poi un ulteriore componente (DAO) che provvede a leggere e scrivere le informazioni rappresentate dal modello, in modo permanente (persistenza), generalmente in un database.

Le componenti Model e View sono da implementare; l’implementazione è complessa, richiede notevoli conoscenze e capacità tecniche ed è completamente a carico dello sviluppatore.

Le implementazioni sono fortemente legate al framework e alle tecnologie ad esso associate.

Anche VISUS si basa sul medesimo pattern ma le tre componenti sono fuse insieme: il Controller è il nucleo di Visus stesso, il Model e semplicemente definito attraverso VisusScript e non implementato scrivendo codice, la View è generata automaticamente secondo vari paradigmi predefiniti e per vari dispositivi.
Il Model si identifica con il database stesso che per sua natura è già di per sé un modello (il modello relazionale).
Le meta-informazioni fornite dal modello VisusScript sono utilizzate per arricchirlo ulteriormente.
Qualsiasi aggiornamento alle informazioni gestite dall’applicazione e rappresentate dal modello è immediatamente ed implicitamente trasmesso al database.
In questo senso VISUS è completamente Data-driven.

Solo la semplice definizione del Model, non la sua implementazione, è a carico dello sviluppatore.

Non essendoci implementazione non si è legati a nessuna tecnologia.

 

Il contenuto ‘procedurale/implementativo’ delle applicazioni

L’approccio comune alla manipolazione dei dati, che generalmente risiedono su di un Database, prevede l’utilizzo di procedure appositamente implementate e scritte con i vari linguaggi di programmazzione tradizionale (Java, C/C++, Visual Basic, Delphi, ecc.).

Questa pratica porta ad una inevitabile separazione tra i dati e le procedure che li manipolano; tale separazione si manifesta nella necessità di differenti tecnologie, strumenti, competenze.

Diversamente, se le necessarie operazioni di manipolazione dei dati sono realizzate unicamente attraverso il database, utilizzando query SQL ed eventualmente Stored Procedure, si ottengono diversi vantaggi:

  • una elevatissima portabilità (naturalmente a patto di non usare caratteristiche specifiche di un database);
  • l’utilizzo di un linguaggio – SQL – tutto sommato standardizzato, sul quale le competenze generalmente si possiedono già, è facile trovarne e maturarne delle nuove è comunque un buon investimento;
  • la possibilità di sfruttare queste logiche da parte di altri sistemi ed anche manualmente;
  • l’utilizzo di uno strumento – il database – ideale per questo tipo di operazioni;
  • la gestione di concorrenza, integrità relazionale e transazionale, e di tutte le caratteristiche native che il database offre (sicurezza, scalabilità, ridondanza, federazione, ecc.);
  • l’accoppiamento e la ‘vicinanza’ (incapsulamento) tra i dati e le operazioni;

 

 

 

Iscriviti alla Newsletter