Sviluppo in Silverlight creazione di applicazioni aziendali in Silverlight

Silverlight è maturato in una solida piattaforma per lo sviluppo e la distribuzione di applicazioni line-of-business.

Gill Cleeren e Kevin Dockx

Sono trascorsi appena tre anni da quando Microsoft presentò Silverlight al pubblico mondiale. Fu in occasione dell'evento Mix07 che si tenne a Las Vegas che venne presentato Silverlight, la prima versione della nuova piattaforma RIA (Rich Internet Application) di Microsoft. Oggi, Silverlight è maturato in una solida piattaforma pronto per creare e gestire applicazioni aziendali.

Silverlight 1.0 includeva un modello di programmazione basato su XAML e JavaScript. Quest'ultimo non è propriamente adatto per la creazione di applicazioni aziendali. Di conseguenza, la prima versione venne utilizzata principalmente in scenari multimediali. Quando fu rilasciato Silverlight 2, la piattaforma divenne un ottimo candidato per lo sviluppo di applicazioni LOB (Line-Of-Business). La modifica più importante introdotta era la possibilità di programmare in .NET (C# o VB.NET) invece che in JavaScript.

Per eseguire un "test" delle funzionalità e della compatibilità di Silverlight per la creazione di applicazioni LOB, abbiamo stilato un breve elenco di requisiti tipici di un'applicazione aziendale. Verificheremo se Silverlight è in grado di soddisfare tali requisiti.

Una notevole quantità di dati

Qual è la prima cosa che viene in mente quando si considerano le applicazioni aziendali? Ovviamente la quantità di dati. Le applicazioni Silverlight vengono eseguite lato cliente all'interno del browser. I dati risiedono, tuttavia, in un database sul server. Osservando gli spazi dei nomi e gli assembly di Silverlight, ci rendiamo conto che non è presente il supporto ADO.NET e di conseguenza non vengono supportate funzionalità note quali DataReaders o LINQ-To-SQL.

Inoltre, Silverlight non dispone di alcun database lato client. In molti casi, questo aspetto è irrilevante, in quanto non è auspicabile archiviare inavvertitamente una copia temporanea di un database con informazioni sensibili in una macchina client.

La soluzione è semplice: aggiungere un livello di servizio al database da utilizzare per connettersi al database, preferibilmente tramite un livello aziendale. Sul lato client, Silverlight può quindi connettersi a tali servizi e accedere ai dati (vedere la Figura 1).

Figure 1 Silverlight can connect to services on the client side

Figure 1 Silverlight può connettersi ai servizi lato client.

Silverlight supporta i tipi di servizio ASMX, WCF e REST. È possibile inoltre impostare Silverlight per l'utilizzo di tipi di servizi più originali come socket e net.tcp. Questa è una funzionalità ideale per aggiungere Silverlight a uno stack tecnologico esistente all'interno dell'azienda. I servizi che consentono a Silverlight di richiamare i dati sono gli stessi che vengono utilizzati per altri tipi di applicazioni.

L'utilizzo dei servizi ASMX e WCF è simile dal punto di vista di Silverlight. La tecnologia WCF dovrebbe rappresentare la scelta d'elezione per l'implementazione del servizio. Esaminiamo un esempio semplice di connessione a un servizio WCF. Il primo passo consiste nel definire la funzione del servizio. In questo caso, il servizio restituisce un elenco di prodotti:

[ServiceContract(Namespace = "")]
publicclassOrderService
{
[OperationContract]
publicList<Product> GetAllProducts()
        {
...
        }
    }

Una volta preparato il servizio, sarà possibile connettersi con Silverlight. A tale scopo, aggiungiamo un riferimento al servizio di Visual Studio (vedere Figura 2).

Figure 2 Use Visual Studio to add a service reference to Silverlight

Figura 2 Utilizzo di Visual Studio per aggiungere un riferimento al servizio a Silverlight.

Verrà ora creata automaticamente una classe proxy, che può essere considerata come una copia lato cliente della classe di servizio, in cui le implementazioni dei metodi sono sostituite da una chiamata al metodo di servizio. Tutte le comunicazioni con il servizio avvengono in modo asincrono in Silverlight. Nell'esempio di codice seguente, utilizziamo il proxy per ottenere un elenco di prodotti:

privatevoid button1_Click(object sender, RoutedEventArgs e)
{
OrderService.OrderServiceClient proxy = new OrderService.OrderServiceClient();
       proxy.GetAllProductsCompleted += newEventHandler<OrderService.GetAllProductsCompletedEventArgs>(proxy_GetAllProductsCompleted);
       proxy.GetAllProductsAsync();
}

void proxy_GetAllProductsCompleted(object sender, OrderService.GetAllProductsCompletedEventArgs e)
{
ProductGrid.ItemsSource = e.Result;
}

REST è attualmente un protocollo particolarmente diffuso grazie alla sua adozione in API Web 2.0 tra cui Facebook e Twitter ed è anch'esso pienamente supportato da Silverlight. Silverlight dispone inoltre di un framework di servizio specifico rivolto ad applicazioni Silverlight a n livelli: i servizi RIA WCF.

N livelli

Durante la creazione di un'applicazione Silverlight, normalmente i dati vengono richiamati tramite un livello di servizio. Tuttavia, non esiste un modo immediato per scrivere semplicemente gli oggetti e le classi di trasferimento dati, compresa la convalida, l'autenticazione e l'autorizzazione in modo simultaneo. Le applicazioni Silverlight vengono create sulla base di una versione limitata di Microsoft .NET Framework 4. Pertanto, non è possibile creare un riferimento a un assembly (ad esempio, un assembly che contenga la logica delle classi o di convalida) creato sulla base della versione completa di .NET Framework 4 in un'applicazione Silverlight.

È questo è il momento in cui entrano in gioco i servizi RIA WCF, creati per semplificare lo sviluppo RIA LOB. Sono in grado di risolvere la complessità insita nella creazione di applicazioni a n livelli grazie alla fornitura di un framework, controlli e servizi lato server e lato client.

Consentono di scrivere servizi associati a un archivio dati lato server, il quale può essere costituito da un database SQL Server, da classi POCO personalizzate o da un modello di entità. Tali entità vengono, quindi, rigenerate nel client. Successivamente, nel client vengono generati il contesto, i metodi e le operazioni necessari per comunicare facilmente con i servizi.

Se si ha familiarità con Entity Framework, la procedura risulterà semplicissima, in quando è possibile scrivere il codice in modo simile. Ad esempio, è possibile che sia presente una variabile DomainContext lato client che consente di monitorare la serie di modifiche, di contenere l'elenco di entità e di inoltrare le modifiche stesse. In questo modo, l'utilizzo di un livello di servizio risulta pressoché "invisibile".

I servizi RIA WCF sono essenzialmente una tecnologia lato server che consente di trasferire codice su un client. Semplifica inoltre l'aggiunta di attività di convalida, autorizzazione e autenticazione dei servizi e delle entità e riduce drasticamente i tempi di sviluppo necessari per la creazione di applicazioni Silverlight LOB.

Problemi di controllo

Silverlight include un insieme di controlli estesi che comprende controlli semplici quali Button, TextBox e ComboBox. Include, inoltre, diversi altri controlli avanzati quali DataGrid, RichTextBox e MediaElement nel pacchetto di installazione predefinito. In ciascuna nuova versione, vengono aggiunti altri controlli.

Microsoft ha inoltre creato il Silverlight Control Toolkit, il quale include un insieme di controlli aggiuntivi Open Source e disponibili gratuitamente tramite CodePlex.com. Il pacchetto viene aggiornato piuttosto regolarmente e in modo indipendente dai rilasci regolari di Silverlight.

Include diversi controlli che possono semplificare ulteriormente il lavoro di uno sviluppatore di applicazioni aziendali Silverlight. Sono anche inclusi controlli per la creazione di grafici che ci risulteranno utili per la nostra prossima attività: la creazione di report.

Possibilità di stampa

Le funzionalità di stampa rappresentano ancora un requisito aziendale spesso obbligatorio. Ora, con la versione 4, è possibile stampare direttamente da Silverlight. L'API consente di indicare cosa stampare, sia che si tratti dell'intera schermata o di contenuto generato dinamicamente come un report. Pertanto, è semplice creare una soluzione per la creazione di report in Silverlight 4 grazie ai controlli inclusi nel toolkit come, ad esempio, i grafici avanzati.

Procedure e modelli consigliati

Quando si utilizzano applicazioni basate su Silverlight o XAML, è importante considerare il modo in cui il codice viene scritto diversamente da come eravamo abituati in precedenti tecnologie, quali ASP.NET o Windows Form. È possibile scrivere il codice allo stesso modo ma non è consigliabile, poiché non si sfrutterebbe appieno la tecnologia.

Le applicazioni Silverlight devono essere basate principalmente su elementi DataContext, associazioni dati e sul modello Observer. Non devono contenere codice ripetitivo per assegnare valori TextBox agli oggetti o viceversa. Più si utilizza codice di questo tipo, maggiore sarà la possibilità di creare bug. Si associa, ad esempio, un oggetto agli elementi dell'interfaccia utente e i valori corretti vengono automaticamente resi disponibili tramite l'oggetto incluso nel codice. In parole povere, non si dovrebbe accedere mai agli elementi dell'interfaccia utente direttamente.

Qui entra in gioco il modello di progettazione MVVM (Model-View-ViewModel), utilizzato spesso per promuovere la separazione dei problemi (il code-behind non contiene pressoché alcuna riga di codice), per lavorare sull'interfaccia utente dell'applicazione separatamente dallo sviluppo e per garantire una maggiore testabilità del codice stesso.

Tuttavia, il vantaggio più importante offerto da questo modello è il fatto che consente agli sviluppatori di sfruttare tutta la potenza della tecnologia degli elementi DataContext e di associazione dati. Ad esempio, la vista può contenere un elemento ViewModel come DataContext, il quale contiene tutte le proprietà dei dati.

Tali proprietà sono associate agli elementi dell'interfaccia utente all'interno della vista tramite l'associazione dati. Quindi, il ViewModel consente essenzialmente di convertire i dati ricavati dal modello (ovvero una rappresentazione a oggetti dei dati) nei dati utilizzabili nella vista: un ViewModel corrisponde quindi a una sorta di "convertitore alla massima potenza".

Una volta impostato l'elemento, sarà necessario un modo per inoltrare gli eventi (ad esempio, buttonClick) al ViewModel, invece che al code-behind della vista. A tale scopo, vengono utilizzati dei comandi specifici. Silverlight fornisce un'interfaccia ICommand con cui è possibile associare elementi dell'interfaccia utente che ereditano l'insieme dei pulsanti nei comandi, definiti nel ViewModel.

Successivamente, sarà necessario un modo per consentire la comunicazione tra i diversi ViewModel senza alcun riferimento reciproco. A tale scopo, è possibile utilizzare un principio di trasmissione/ascolto. I sottoscrittori del ViewModel ricevono un tipo specifico di messaggio, mentre un altro ViewModel invia un altro messaggio. Alla ricezione del messaggio, è possibile eseguire le operazioni necessarie.

Per finire, sarà necessario verificare che la vista conosca il relativo elemento DataContext. Esistono approcci diversi: l'approccio basato sulla vista (l'applicazione crea un'istanza della vista la quale, a propria volta, è responsabile della creazione di un'istanza del ViewModel necessario) o l'approccio basato sul ViewModel (o viceversa). Per riprodurre le responsabilità, spesso viene utilizzato un contenitore IoC o un MEF (Managed Extensibility Framework).

Esistono diverse implementazioni del modello MVVM. È possibile crearne uno personalizzato, ma nella community Open Source ne esistono implementazioni molto valide, come MVVM Light Toolkit, Caliburn o Prism.

Come avrete notato, Silverlight è pronto per la creazione di applicazioni di livello aziendale e infatti noi ce ne serviamo quotidianamente.

Gill Cleeren

Gill Cleeren* è un Microsoft Regional Director (theregion.com), MVP ASP.NET, membro dell'INETA Speaker Bureau e un insider di Silverlight. Vive in Belgio dove lavora come progettista .NET presso la società Ordina. È inoltre autore di molti articoli in diverse riviste per sviluppatori e recentemente ha pubblicato il suo primo libro intitolato: "Silverlight 4 Data and Services Cookbook" (Packt Publishing, 2010). Il suo blog è disponibile all'indirizzo: snowball.be.*

 

Kevin Dockx

Kevin Dockx* è uno specialista tecnico/responsabile di progetto di applicazioni Web .NET per RealDolmen, una delle più grandi aziende ICT in Belgio. Il suo principale interesse è relativo a tutto ciò che riguarda Silverlight, ma con una particolare attenzione ad altri prodotti dello stack Web Microsoft .NET. Partecipa abitualmente come relatore a eventi nazionali e internazionali, come Microsoft DevDays nei Paesi Bassi, Microsoft Techdays in Portogallo o presso gli eventi BESUG (the Belgian Silverlight User Group). Il suo blog, che contiene diverse informazioni su Silverlight, .NET e produzioni occasionali, è disponibile all'indirizzo: blog.kevindockx.com.*

 

Contenuto correlato