The Dark Side of .NET Programming

Il blog di Michele Aponte
posts - 212, comments - 145, trackbacks - 16

UgiDotnet CT: WCF RIA Services == RAD for Silverlight

Corrado Cavalli ci presenta WCF RIA Services illustrandoci come questa tecnologia ci permetta di realizzare applicazioni LOB con Silverlight in maniera RAD. L’insieme della parte di presentazione e la parte che sta sul server rappresenta la classica Rich Internet Application, il che significa avere a che fare con applicazioni n-tier.

SNC00285 SNC00286

Alcuni aspetti problematici da gestire

  • Sincronizzazione dei client
  • Propagazione eccezioni
  • Batch Mode

risolvere questi problemi rappresenta uno sforzo non indifferente, possiamo però usare i RIA Services per semplificarci la vita. Parliamo di un insieme di framework, tools e servizi per la semplificazione delle problematiche RIA

  • Data Shaping (Paging, Sorting, Filtering)
  • Rules (Validazone, Autorizzazione, User Settings, Concorrenza)
  • Ottimizzazioni (invio batch di dati al server9

Lo scopo è rendere fruibili le operazioni e le entità di business nella maniera più semplice e naturale possibile. Cosa da non sottovalutare è che non sono legato da uno specifico data acces (però usare EF & L2S aiuta!). Per utilizzare subito questa tecnologia basta scaricare i WCF RIA Service per Visual Studio 2010 Beta 2.

Corrado ci mostra subito una demo, realizzando un catalogo musicale (il suo commento: perlomeno non ho usato northwind…:D) (per la demo vi rimando ai video delle sessioni che saranno disponibili nei prossimi giorni).

SNC00287

Come funziona? Viene creata un’infrastruttura che lega client e server:

  • Runtime via WCF
  • Statico (Code generation e Shared code via Visual Studio)
  • il legame è trasparente per lo sviluppatore
  • Enable .NET RIA Services link in Visual Studio

Il punto cruciale è la classe DomainService, che rappresenta l’insieme delle operazioni CRUD messe a disposizione lato server. Può essere autogenerata da Visual Studio, possiamo usare LinqToSqlDomainservvice e LinqToentitiesDomainService. L’altro oggetto cruciale è il DomainContext che  è la versione lato client del DomainService, che ci offre un insieme di elementi quante sono le entità esposte dal servizio, un oggetto EntityQuery<T> quante sono le operazioni di lettura espose dal servizio, il metodo load(EntityQuery<T>) che esegue la query invocando il relativo metodo del server, rejectchange e submitchange. E’ fortemente basato su delle convezioni, ad esempio ogni metodo del servizio che torna un’entità genera una query GetXXX e ReturnXXX, deve ritornare <T>, IEnumerable<T> o IQueryable<T>.

Ad ogni tipo esposto dal DomainService possono essere associati dei metadati che controllano la generazione lato client:

  • [Name].metadata.cs
  • E’ una classe parziale decorata con MetadataTypeAttribute
  • Permette di arricchire i tipi senza agire sui tipi stessi (POCO)

Posso usare degli attributi di validazione:

  • Required
  • StrinLenght
  • RegularExpression
  • Range
  • Display
  • Custom

Oltre alle classiche funzionalità di CRUD, possiamo invocare un qualsiasi metodo di business utilizzando l’attributo [Invoke] : il metodo così decorato rappresenta un mio classico metodo esposto con wcf (lato client diventa un metodo sul context). se voglio che il metodo sia invocato alla SubmitChanges uso l’attributo [Update] sul metodo.

La unit of work viene elaborata secondo questa sequenza:

  • Submit – riceve il changeset
  • authorizeChangeSet – verifica i permessi
  • ValidateChangeSet – esegue la validazione
  • ExecuteChangeSet – esegue le operazioni
  • PersistChangeSet – invoca la submit del context
  • ResolveChangeSet – processa le unit che hanno avuto problemi di concorrenza

tutti virtual che posso overridare. Un ulteriore attributo, [Resolve], permette di definire la nostra logica di risoluzione della concorrenza. E’ possibile inolte utilizzare lo stesso meccanismo di autenticazione, ruoli e profili di ASP.NET. lato client la parte di autorizzazione è esposta da WebContext.

Tutti i domain services in una web application generano il relativo context, quindi se ho due applicazionni silverlight che usano i miei servizi possono realizzare una ria services class library e referenziarla nella mia applicazione silverlight.

Perdonate eventuali imprecisioni ma era difficile seguire e scrivere conteporaneamente! Vi lascio con una foto emblematica del risultato della sessione:

SNC00288

Print | posted on martedì 2 febbraio 2010 08:49 |

Feedback

Gravatar

# re: UgiDotnet CT: WCF RIA Services == RAD for Silverlight

Complimenti! un riassunto perfetto!
02/02/2010 18:04 | Corrado Cavalli
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET