Di Maurizio Cunico
Sempre più spesso capita di doversi porre il problema se l’applicazione che ci era richiesta dovesse essere un' applicazione Windows stand-alone o un'applicazione Web.
Sino a qualche anno fa la scelta era chiara e definita:
-
Se l’applicazione era di una certa complessità nell’interfaccia utente e nell’interazione operativa e stava all’interno di una rete locale con macchine di media o alta configurazione la scelta cadeva automaticamente su applicazioni Windows (tipicamente in un contesto client-server)
-
Se l’applicazione doveva essere distribuita geograficamente e/o vivere su macchine molto leggere la soluzione inevitabilmente diventava il Web
Ad un certo momento sono entrati in gioco molti altri fattori (non tutti razionali) e tutta l’attenzione si è spostata sulle applicazioni web.
Parlare di Client-Server dava un bruciore al naso, come quando si apre un libro antico o le ante di un vecchio armadio nella soffitta di casa, la sensazione di polveroso e demodé vinceva la razionalità e l’analisi puntuale della soluzione architetturale corretta.
Siamo passati ad applicazioni improbabili, dove l’interfaccia utente faceva cose per le quali non era nata e spesso molto malamente.
Così abbiamo subito applicazioni con pagine web con 100 campi che, una volta completati, fornivano un lenzuolo di errori, errori quasi sempre annunciati con messaggi sibillini o semplicemente assurdi.
“Codice Avviamento Postale non coerente con il Comune” annunciava quella maledetta riga rossa, peccato che la maschera prevedesse una ventina di indirizzi che avevo imputato e che non mi dicesse quale era dei venti quello non coerente.
Mi si dirà che questo può avvenire anche in una applicazione stand-alone e non è un problema di strumento, ma di sviluppo del software.
Giusta osservazione, tuttavia non ho mai capito perché nelle applicazioni web queste situazioni erano particolarmente comuni.
Allora è cominciata una rinnovata attenzione alle applicazioni Windows.
Ed ecco arrivato lo Smart Client. Strano nome che non descrive quella che è una tecnologia estremamente interessante ovvero la possibilità di usare il web per la cosa che sa fare meglio, ovvero offrire servizi.
La contemporanea esplosione dei web services ha fatto diventare il SOA (Service Oriented Architecture) il paradigma dello sviluppo applicativo.
Straordinario per la parte di servizi, ma per la presentation il problema rimane irrisolto: applicazioni Windows o Web?
Ambedue possono utilizzare il meglio che la tecnologia SOA fornisce e quindi non abbiamo alcun aiuto nella nostra scelta.
.gif)
In questa pagina
Un po’ di Storia
Cosa deve fare un’applicazione?
Interattività
UI del Web
E oggi?
Cerchiamo di capire
WPF
XAML
Conclusione
Un po’ di Storia
Ripercorriamo per un istante la storia delle due tipologie di applicazioni, almeno per quello che si riferisce al recente passato.
-
Applicazioni Windows
-
1994 – Win32
-
Nuovi livelli di funzionalità per le applicazioni installate
-
Molte librerie che semplificano significativamente lo sviluppo tra cui MFC, ATL, VB
-
1996 – DirectX
-
Piattaforma Windows per lo sviluppo di giochi
-
2002 – Windows Forms
-
Ambiente a elevata produttività per Win32
-
Applicazioni Web
-
1995 - HTML
-
User experience sacrificata per la portabilità, connettività e semplicità
-
1997 – DHTML
-
Interattività per il web, non ha avuto un grande successo
-
2005 – Miglioramento dell’interattività
-
La “riscoperta”del DHTML
Oggi è in forte crescita la domanda per una maggior ricchezza della presentazione e dell’interazione.
-
Il cliente vuole una utilizzabilità sempre migliore
-
Ma si incontrano dei limiti
-
Chi si deve raggiungere
-
Si controlla tutto l’ambiente? Si deve raggiungere chiunque e su qualsiasi periferica?
-
Capacità
-
Sono in grado di fare quello che il progettista ha previsto o semplicemente fare il meglio che si può fare?
-
Inerzia
-
I sistemi sono una realtà. Gli utenti sono legati ai modelli che usano
Scegliere di investire, oggi, su un miglioramento dell’usabilità porta ad acquisire valore tramite la differenziazione e l’esaltazione del valore per il cliente
Proviamo ad ampliare il punto di vista sul problema e proviamo a scendere in profondità su alcuni aspetti dell’applicazione.
Cosa deve fare un’applicazione?
Apparentemente la domanda è retorica: un'applicazione deve risolvere uno specifico problema di un’azienda o di un utente.
In realtà una applicazione aziendale è una cosa un po’ più complessa.
Deve essere inserita in un contesto di altre applicazioni, e non solo per gli aspetti di integrazione delle applicazioni, ma anche per logiche di manutenzione, di supporto e di ottimizzazione.
Quindi un’applicazione è un oggetto maneggiato dai sistemi informativi, i quali ne hanno la responsabilità di funzionamento.
Cosa succede nella realtà? La scelta sull’applicazione, l’architettura e la presentazione, è nelle mani, in quota parte o completamente, di un ufficio, l’IT, che non è il vero utilizzatore finale.
Questo porta a far sì che a volte l’applicazione sembra fatta più su misura dei sistemi informativi che non dell’utente finale.
Questo funziona come un deterrente al miglioramento della User Experience.
Ogni evoluzione, ogni miglioramento, ogni estensione di usabilità, porta con sé maggior complessità manutentiva e bisogno di una maggiore specializzazione, e quindi maggior lavoro per i sistemi informativi.
La scelta della tecnologia di sviluppo, quindi, non è solo tecnologica ma anche inserita nella relazione tra le diverse componenti aziendali.
A questo punto il problema ritorna alla domanda base: cosa deve fare un’applicazione?
Un’applicazione non è un abito per tutte le stagioni, un’applicazione non può piegare l’organizzazione, le metodologie aziendali, le abitudini e i risultati a regole scritte fuori dal contesto aziendale, seppur scritte da super esperti.
Ogni business è frutto dell’intelligenza di un gruppo di persone ed è in questa fucina di idee e intelligenze che si passa da idea a business.
L’applicazione, quindi, deve avere come prima, e forse unica, ragione e obiettivo quello di risolvere nella miglior maniera possibile il problema dell’utente e di business, lasciando in secondo piano i problemi organizzativi e di IT.
A volte, guardando il software in uso in un’azienda, sembra che questo sia completamente slegato dall’utilizzo previsto.
Un hotel nel quale mi fermo spesso, ha un sistema di emissione della fattura che, tutte le volte, genera in me un sentimento quasi di tenerezza, dalla mia richiesta di emissione della fattura alla stampa del documento la signora della cassa fa 15 click con il mouse (li ho contati), alcuni giustificati (scelta se fattura o ricevuta, scelta dell’anagrafica della fattura – che è già inserita -), altri totalmente incomprensibili (tra questi un magico click che porta a una maschera che prevede una lista vuota che viene confermata, con un click, senza alcun intervento).
L’applicazione non risponde quindi alle esigenze per la quale è stata fatta, ovvero di emettere rapidamente il documento fiscale e permettere al cliente di partire.
Di nuovo, l’applicazione deve risolvere il problema dell’utente non risolvere il problema di tutti i possibili utenti e tutte le possibili condizioni.
La profilazione funzionale è e deve essere elemento di grande attenzione nella realizzazione di applicazioni.
Interattività
Un altro aspetto importante nella valutazione dell’architettura migliore per un’applicazione, è nel cercare di capire quale sia l’interattività realmente necessaria.
La vera interattività in cosa consiste?
Nell’avere sempre una risposta immediata a ogni azione dell’utente o avere una risposta intelligente a ogni azione?
La questione non è banale, la tendenza attuale è quella di dare sempre una risposta immediata all’utente, quasi l’efficienza fosse nella velocità, ma la vera efficienza sta nell’intelligenza della risposta.
Quante volte abbiamo cercato un aiuto in un’applicazione e abbiamo avuto come risposta qualcosa che non c’entrava nulla.
Anche nei proverbi si ricorda che la fretta non porta nulla di buono.
L’utente deve essere aiutato, non annoiato o infastidito.
Devo costruire un sistema capace di modulare la reazione in base non alla singola azione, ma all’insieme delle azioni che l’utente sta compiendo.
La soluzione al supporto, quello vero, è quello di capire cosa l’utente sta facendo e anticiparne i comportamenti avendo la capacità si capire dove fermarsi.
Le applicazioni devono cominciare a integrare degli agenti intelligenti che capiscono cosa l’utente sta facendo, sia nel contesto dell’applicazione che nel contesto di tutte le applicazioni che l’utente sta utilizzando, per anticipare e governare un supporto che sarà tanto più efficiente quanto meno evidente sarà.
Un esempio è il correttore ortografico che corregge, dove può, senza chiedere nulla.
Da un certo punto di vista ci si sente un po’ scimmie, dall’altro la comodità è tale che questo ci va bene.
Il supporto deve essere invasivo nella sostanza, ma non deve esserlo nella forma.
UI del Web
Le applicazioni web presentano grossi limiti di interazione con l’utente.
I data entry massivi non vanno molto d’accordo con un’interfaccia che richiede di andare al server ogni qualvolta debba essere fatta una validazione, quando questa non possa risiedere sul client.
Ma l’utente vuole l’interfaccia utente del web e l’interfaccia funzionale dell’applicazione windows.
Ma le applicazioni possono essere solo o web o windows?
E oggi?
Sta nascendo un nuovo modo di fare applicazioni o sta nascendo una nuova generazione di utenti che non si accontenta delle applicazioni esistenti.
L’applicazione Windows è efficiente negli aspetti funzionali, ma lo è molto meno nella presentazione.
Un’applicazione Windows è “windows” per come si presenta o per come funziona o lo è perché il suo uso è più “windows”?
Mi scuso per il gioco di parole ma forse l’applicazione è “windows” per il suo utilizzo.
L’applicazione non è la “tecnologia”, è l’uso che se ne fa.
Ma se il tipo di applicazione è il suo uso dobbiamo cercare di semplificare le differenze, o eliminarle, per scegliere quello che serve solo in base a ciò di cui abbiamo veramente bisogno.
Cerchiamo di capire
Possiamo cercare di categorizzare gli elementi applicativi per capire come le diverse tipologie di applicazione rispondono alle esigenze
La tecnologia che si presenta più interessante da questa tabella è la Windows Presentation Framework (WPF) e la XAML Browser Application (XBAP).
Questa tecnologia, a disposizione con il Framework .NET 3.0, ha introdotto nelle applicazioni Windows elementi di grafica e multimedialità avanzata, oltre alla gestione dei documenti e dei dati destrutturati.
Ma ha introdotto qualcosa di ancora più importante: le due tipologie, windows e web, sono diventante un solo contesto.
La diversità è solo nell’hosting.
WPF
La Windows Presentation Foundation introduce il concetto dell’approccio unificato per diverse interfacce utente.
Le tradizionali interfacce grafiche a menu e bottoni, non soddisfano più gli utenti, a fianco a queste è necessario avere oggetti grafici a due e tre dimensioni, animazioni e filmati.
Questo deve essere possibile indipendentemente dalla scelta di avere un’applicazione in host su web o in logica stand-alone.
Oggi una soluzione complessa come quella ipotizzata sopra può essere realizzata parzialmente con un’applicazione Windows Form o, in alternativa, si può creare un’interfaccia per browser tramite l’HTML e JavaScript o applet.
Ma non basta, bisogna integrare un media player, eventualmente un software come il Player Flash, interagire con Word o con il Reader Adobe per i documenti o i PDF e altri ancora.
È chiaro che generare un’interfaccia coerente con tutti questi diversi tipi di client, che utilizzano diverse tecnologie, non è per niente facile.
L’obiettivo di Windows Presentation Foundation (WPF) è proprio di risolvere questa problematica.
WPF offre una piattaforma comune per client desktop e browser, che permette una semplificazione nello sviluppo delle applicazioni.
L’approccio è quello di fornire un supporto completo, oltre che per lo sviluppo delle funzioni applicative, anche il supporto per la riproduzione di filmati, animazioni, elementi grafici a due o tre dimensioni e diversi tipi di documenti.
Tuttavia, nel momento in cui abbiamo strumenti evoluti di presentazione a disposizione, incappiamo in un altro problema.
I programmatori sono molto bravi a creare le interfacce applicative e le interfacce logiche, ma tipicamente non sono altrettanto bravi a gestirne l’aspetto.
Per fare questo ci sono i grafici e i designer che sono specializzati a realizzare l’interfaccia d’interazione tra utente e macchina.
Il problema più grosso è che i metodi di collaborazione, tra programmatori e designer, non esistono o sono poco efficienti.
XAML
La tecnologia Windows Form, inoltre, non è decisamente adatta alla gestione di grafica sofisticata.
Per gestire questa problematica WPF propone l’uso di XAML (eXtensible Application Markup Language), un linguaggio basato su XML che permette di specificare l'interfaccia utente in modo dichiarativo, anziché a livello di codice.
A partire da questo è possibile sviluppare interfacce applicative (il programmatore) dall’interfaccia grafica (il designer).
Le due tipologie di applicazione, Windows e Web, sono sviluppate basandosi sulla stessa piattaforma applicativa.
Le applicazioni stand-alone e quelle web possono condividere lo stesso codice sorgente e si differenziano per due soli motivi: le applicazioni web utilizzano un template di base diverso che si chiama XBAP (Xaml per il Web), l’altro è che le applicazioni web, per loro natura, hanno limiti nelle attività che l’applicazione possano eseguire.
Nelle applicazioni XBAP è comunque consentito l'utilizzo di un esteso sottoinsieme di funzionalità dell'interfaccia utente disponibili nelle applicazioni WPF stand-alone.
Sia le applicazioni WPF stand-alone che le applicazioni XBAP includono il supporto per molte tecnologie grafiche di WPF come l'accelerazione hardware, il supporto della grafica vettoriale e altro.
Le applicazioni XBAP sono applicazioni WPF che vengono eseguite nel Browser e che come le applicazioni stand-alone forniscono una ricca User Experience (2D, 3D, Animazioni).
Vengono eseguite in una “sendbox” che offre alti livelli di sicurezza grazie alla CAS (Code Access Security) di .Net.
Tuttavia questa “sandbox” introduce una serie di limiti funzionali e tra questi l’impossibilità di usare WCF, MFC, WinForm, Win32 e codice Unmanaged e una limitata capacità di accesso al disco.
Possono essere ospitate da Internet Explorer 6 o7 e deve essere installato sul computer WPF (o WPF/E come sottoinsieme di WPF per le piattaforme su cui non sia installato WPF).
Le due modalità di Trust si applicano rispettivamente alle applicazioni WPF stand-alone e XBAP.
Full Trust per le applicazioni WPF: permette l’accesso a tutte le risorse della macchina, le applicazioni sono installate usando ClickOnce o MSI ed è chiesta conferma per l’installazione;
Partial Trust per le applicazioni XBAP: hanno accesso limitato alle risorse di sistema, non è chiesta conferma per l’installazione, girano in un processo con diritti limitati.
E ancora, il WPF fornisce la base per XML Paper Specification (XPS), che definisce un formato standard per la visualizzazione, la distribuzione e la stampa di documenti a formato fisso.
Il WPF è disponibile tramite .NET Framework 3.0.
Il WPF si associa allo sviluppo delle Windows Forms per le specifiche caratteristiche delle due tecnologie.
Windows Form abilita lo sviluppo rapido per applicazioni smart client
-
Abbassa il costo del rilascio delle soluzioni client
-
È focalizzato sulla logica di business
-
Ha tool di supporto focalizzato sulla produttività
-
Ha un esteso insieme di controlli comuni
-
Fornisce un grande supporto al disegno applicativo
-
È un ecosistema immenso
Windows Presentation Foundation gestisce un approccio unificato alla User Interface, media e documenti per fornire una nuova e più efficace User Experience
-
Permette di realizzare una ricca e innovativa interfaccia utente
-
Fornisce l’integrazione dei media
-
Incrementa la produttività degli sviluppatori
-
Migliora la capacità di rilascio delle applicazioni
-
Il codice e l’insieme delle competenze esistenti sono preservate e rafforzate
-
È potente e flessibile
WinForms e WPF insieme
-
WPF è ospitato nelle applicazioni Windows Forms
-
Un insieme di servizi fornisce un adeguato supporto a scenari di coesistenza
-
Conversione tra i tipi
-
Gestione del Focus
-
Gestione della tastiera
-
Mappa delle proprietà estensibili
-
Produttività e semplicità d’uso delle WinForm
-
Potenza, ricchezza e flessibilità del WPF
-
Si usano direttamente insieme nella stessa applicazione
Con la prossima versione dell’ambiente di sviluppo sarà resa disponibile anche un framework per la gestione delle cosiddette Applicazioni Occasionalmente Connesse.
Queste applicazioni avranno una serie di caratteristiche molto interessanti che possono essere riassunte in
-
Semplice abilitazione delle applicazioni client al loro uso on-line e offline
-
Database relazionale locale
-
Piccolo (< 1.5 MB)
-
Nessuna installazione a “grande impatto”
-
Lo stesso modello di programmazione per i dati
-
Un singolo file, formato code free (.sdf)
-
In-Proc hosting che non viene eseguito come servizio
-
Sino a 4 gigabytes per database
-
Connessioni multiple per le operazioni sui dati in background
-
Sicurezza semplificata con password e cifratura
-
Processore delle Query con la gestione delle Transazioni
-
Motore di Sincronizzazione
-
Efficace, Leggero, 2 Tier, API Sync Scalabili (RDA)
-
Completo supporto per il Merge Replication
-
Occasionally Connected Sync Framework
-
Lavora ottimamente nelle WinForms e WPF
-
OCS Sync Component Architecture
-
Lavora con database locale sul modello di Outlook
-
Il Sync mantiene sincronizzati i contenitori locali e remoti
-
Può fare push dei cambiamenti direttamente o attraverso servizi
-
Riutilizza le competenze di ADO.NET
-
Componentizzato per l’uso dei patterns
Conclusione
Per tornare alla domanda che da titolo a queste note la risposta è che tra le applicazioni windows e quelle web si è intrufolata una nuova modalità di applicazione.
Le nuove applicazioni sono aperte alle nuove richieste degli utenti e i programmatori, gli analisti e gli architetti devono tornare a porre massima attenzione e fantasia per prendere quello che questo ambiente fornisce.
Molto di più è possibile, bisogna abbandonare ciò che è consolatorio nel “ben conosciuto” per passare le Colonne d’Ercole ed entrare nell’oceano che ci mette alla prova ogni giorno, e che mette il sale nel nostro lavoro.