Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Pro WPF and Silverlight MVVM: Effective Application Development with Model-View-ViewModel
Recensito da Enrico Taufer Marinelli il 12-03-2012 ore 09:05
Copertina ISBN: 9781430231622
Autori: Gary McLean Hall
Editore: Apress
Lingua: Inglese
Anno: 2010
Pagine: 272
Allegati: Nessuno
Intel Cluster Studio XE
Gary McLean Hall è uno sviluppatore inglese, che descrive se stesso come un senior developer specializzato in Test Driven Development (TDD), metodologie agili, pattern e C#. La lettura del suo testo conferma pienamente la sua opinione: c'è pulizia e rigore nel disegno delle classi utilizzate nel codice d'esempio e padronanza e competenza nelle metodologie di sviluppo indicate.

L'obiettivo di questo volume è mostrare come sia possibile architettare e progettare efficacemente un'applicazione dotata di un'interfaccia utente, sfruttando le possibilità offerte da WPF e Silverlight, i due framework di Microsoft orientati allo sviluppo rispettivamente di desktop e web application dall'elevato livello di user experience. L'autore introduce a tale scopo il pattern architetturale MVVM (Model-View-ViewModel), una relativamente recente (2006) declinazione proposta da Microsoft di quella famiglia di pattern architetturali, orientata alla separazione tra la domain logic e la user interface di un'applicazione, il cui capostipite può considerarsi il pattern MVC (Model-View-Controller).

In maniera assai semplicistica, definita M-X(X)-V la famiglia, si può dire che in tutte le varianti del pattern un'applicazione è suddivisa in 3 diversi layer:
  • il Model, in cui trovano posto le classi che rappresentano il dominio del problema;
  • la View, lo strato più prossimo all'utilizzatore, di cui raccoglie gli input e a cui mostra i risultati dell'elaborazione;
  • un terzo strato, sopra indicato con X, che disaccoppia i primi due cercando, in maniera più o meno efficace, di evitare che le modifiche al Model abbiano a riverberarsi sulla View e viceversa, o in alternativa di minimizzarne l'impatto.
Le diverse varianti si distinguono per le dipendenze introdotte tra i layer e per il modo in cui lo strato X(X) assolve al suo obiettivo. La suddivisione tra gli strati può essere non soltanto logica, ma tradursi in unità di deployment distinte.

Il testo, per poter essere apprezzato pienamente, si rivolge a un pubblico competente o almeno ben informato su una vasta gamma di tecniche di sviluppo. Scritto con un linguaggio molto efficace, sintatticamente e lessicalmente più ricco di un usuale manuale tecnico, rappresenta una lettura piacevole ben corredata da immagini e codice d'esempio.

Nello stesso tempo, per precisa scelta stilistica, è estremamente succinto nell'affrontare la quasi totalità degli argomenti che l'autore decide di toccare. Il modo in cui l'autore presenta, ad esempio, lo unit testing, gli Object Relational Mapper, i design pattern utilizzati nel codice illustrativo, ma anche le scarne motivazioni addotte come base di un'architettura a layer M-X(X)-V, presuppongono il lettore autonomo e competente su questi temi.

Sono dieci e agili i capitoli in cui il testo si articola, non tutti a mio parere necessari o coerenti con il titolo. Il capitolo uno introduce WPF e Silverlight, presentandone le caratteristiche e comparandone le funzionalità.

Il capitolo due mostra come si possa realizzare il data binding in maniera del tutto (o quasi) dichiarativa attraverso XAML (eXtensible Application Markup Language), il linguaggio di markup che WPF e Silverlight rendono disponibile per la costruzione dei controlli nell'interfaccia utente e il loro collegamento ai dati.

Il capitolo tre presenta il modello delle dipendenze previsto dal pattern. La View dipende esclusivamente dal ViewModel, a sua volta dipendente in esclusiva dal Model. Poi l'autore illustra i vantaggi di separare il modello dalla vista: la Separation Of Concerns e la minimizzazione della dipendenza tra i layer, che aumentano la coesione tra le parti e riducono l'accoppiamento; come effetti collaterali, la Dependency Injection e lo unit testing autonomo di ogni layer. Succintamente si descrivono le alternative a MVVM.

Il capitolo quattro è centrale per la comprensione del pattern. Qui l'autore descrive le tecniche e i trucchi necessari per strutturare l'applicazione in concreto, quali elementi devono essere rigorosamente introdotti nello strato ViewModel e come metterli in relazione con gli altri strati.

Il capitolo cinque descrive e compara i modelli d'interazione utente basati sugli eventi con quelli basati sui comandi, con un efficace utilizzo di design pattern e diagrammi UML.

Il capitolo sei, partendo dalla validazione degli input utente, affronta le tematiche dei cosiddetti cross-cutting concern. In un'architettura a layer, alcune funzionalità come autenticazione e autorizzazione, registrazione degli eventi di log e validazione degli input sono trasversali e, come tali, vanno enucleate dai layer MVVM e sviluppate in assembly separati. Diversi sono i framework che implementano già con grande efficacia tali funzionalità e l'autore ne suggerisce l'utilizzo.

Il capitolo sette argomenta sinteticamente, ma efficacemente, sull'importanza dello unit testing. Sono brevemente presentate le tecniche, i framework di base e quelli a supporto dei metodi di mocking degli oggetti, gli strumenti disponibili negli IDE.

Il capitolo otto presenta il problema dell'accesso ai dati persistenti e delle diverse tecniche con cui può essere approcciato in un'applicazione con l'architettura prescelta. Molto interessanti, ancorché non originali, l'illustrazione del problema che un modello ad oggetti incontra nell'accedere a un modello relazionale, e la descrizione delle diverse tecniche con cui una gerarchia di classi possa essere rappresentata in modello relazionale. Assai fugacemente si accenna ai framework di Object Relational Mapping, che alleviano, quando non risolvono, il problema.

Il capitolo nove mi sembra del tutto fuori contesto, descrivendo come serializzare gli oggetti e come estendere le applicazioni WPF/Silverlight.

Il capitolo dieci riunisce molti dei concetti presentati nel testo descrivendo lo sviluppo di un'applicazione d'esempio. Il capitolo è molto interessant, e l'autore si lascia apprezzare per la pulizia progettuale, la nitidezza e l'efficacia dell'implementazione, il rigore nell'applicazione dei principi in precedenza illustrati.

Tirando le somme, a mio parere il testo non è pienamente riuscito. Moltissimi i punti di forza, è vero: il linguaggio, i diagrammi e le figure, il codice a corredo, i pro e i contro per ognuna delle tecniche proposte; ma nello stesso tempo troppa ambizione nel voler presentare tutte, ma proprio tutte, quelle che l'autore ritiene essere le best practices dello sviluppo software attuale, a scapito di una troppo sintetica trattazione del pattern MVVM e dei trucchi necessari a mitigarne la difficoltà d'applicazione e le trappole nello sviluppo. Avrei gradito viceversa, una discussione sulle possibilità di deployment multi-tier dei diversi layer e degli assembly che implementano i cross-cutting concern.
proUna descrizione efficace e completa di come architettare e progettare secondo la regola dell'arte un'applicazione dotata di user interface.
controPoca enfasi alle specificità di WPF e Silverlight. Inoltre il target a cui il testo si rivolge è un pubblico dalle competenze decisamente avanzate, e per costoro, rappresenta spesso una semplice raccolta di concetti consolidati e dibattuti in altri contesti.
Precedente: Gli identificatori JavaScript, questi sconosciuti
Successiva: Un nuovo linguaggio per il trojan Duqu?
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.28 secondi.