Quantcast
Channel: QMatteoQ's blog - Il blog di Matteo Pagani
Viewing all articles
Browse latest Browse all 41

Caliburn Micro e Windows Phone – La teoria

$
0
0

Innanzitutto chiedo scusa a chi segue il mio blog per essere stato poco attivo ultimamente ed essere riuscito ad aggiornare con una certa costanza solamente il mio blog inglese. Non è assolutamente mia intenzione quella di “abbandonare” la community italiana che, anzi, vuole essere sempre il punto di riferimento delle mie attività. Purtroppo un progetto molto importante mi ha tenuto occupato negli ultimi mesi, sottraendomi tempo dal blog: spero di poter condividere presto con voi i frutti di questo lavoro Smile

Recentemente sul mio blog in inglese ho pubblicato una serie di articoli dedicati a Caliburn Micro,un framework piuttosto celebre per l’implementazione del pattern Model-View-ViewModel (MVVM, da ora in poi) nelle applicazioni basate su tecnologie XAML, come Silverlight, WPF e, di conseguenza, anche Windows Phone.

Ho deciso di proporre questi tutorial anche in italiano, per chi di voi non masticasse bene la lingua di Shakespeare. Iniziamo con questo primo post, dedicato alla teoria necessaria per capire il funzionamento di Caliburn e le differenze con gli altri framework.

Che cos’è MVVM? Non è questa la sede opportuna per approfondire il discorso: è un argomento molto vasto, che ho già avuto modo di trattare in questo blog quando vi ho parlato di MVVM Light. Al momento è importante sottolineare solamente lo scopo di MVVM, ovvero l’organizzazione del codice così da separare la logica dell’applicazione da tutto ciò che invece riguarda l’interfaccia utente e le interazioni.

Sono sempre stato un grande fan del toolkit MVVM Light di Laurent Bugnion, ma dato che sono piuttosto curioso di natura ho deciso di dare una possibilità anche ad un altro famoso framework, ovvero Caliburn Micro. Perchè parlo di toolkit e framework e non di librerie? Perchè MVVM è un pattern, ovvero un approccio per definire l’architettura di un’applicazione. Per questo motivo, tali toolkit non rappresentano MVVM in sè, ma offrono una serie di helper e utility per implementarlo.

MVVM Light e Caliburn Micro hanno due approcci differenti: vediamone i pro e i contro.

MVVM Light

MVVM Light è molto leggero e semplice e da allo sviluppatore il pieno controllo sull’architettura del progetto. Per questo motivo, l’infrastruttura messa a disposizione da MVVM Light è molto semplice e offre perciò una serie di helper per implementare le caratteristiche base di MVVM, come:

  • Una classe dalla quale i ViewModel possono ereditare per sfruttare le funzionalità base del pattern, come il supporto all’interfaccia INotifyPropertyChanged.
  • Un implementazione dell’interfaccia ICommand, necessaria per gestire all’interno del ViewModel le interazioni dell’utente con l’interfaccia grafica (ad esempio, la pressione di un pulsante).
  • Un implementazione della classe Messenger, che consente di scambiare messaggi tra ViewModel differenti.
  • Un semplice container per la dependency injection, che consente di risolvere i ViewModel e le relative dipendenze a runtime.

Quali sono i vantaggi di utilizzare MVVM Light? Dato che la sua implementazione è molto semplice, da allo sviluppatore la possibilità di adattare il pattern MVVM alle sue esigenze. Inoltre, dato che MVVM Light si appoggia alle funzioni base dello XAML (come il binding), risulta semplice da capire per qualsiasi sviluppatore che abbia una buona conoscenza di questo linguaggio.

Il contro è essenzialmente uno solo: dato che l’implementazione è molto semplice, lo sviluppatore deve fare un po’ di lavoro per implementare tutto ciò che serve ad un’applicazione per funzionare correttamente e per gestire al meglio scenari tipici del mondo Windows Phone, come la navigazione o il supporto al tombstoning, che risultano più complessi da implementare con il pattern MVVM a causa della forte separazione tra la View e il ViewModel.

Caliburn Micro

Caliburn Micro utilizza invece un’approccio piuttosto differente, che comporta una configurazione ma più complessa ma che consente allo sviluppatore di essere più produttivo, dato che nasconde tutti i meccanismi che solitamente è necessario implementare per supportare MVVM.

Caliburn Micro è fortemente basato sul concetto di convenzione per collegare tra loro i diversi aspetti che compongono il pattern: ad esempio, non è necessario l’utilizzo della classe ViewModelLocator per collegare le View con i relativi ViewModel, perchè è sufficiente dare al ViewModel lo stesso nome della View seguito dal suffisso ViewModel (ad esempio, MainView e MainViewModel). In questo modo, il ViewModel sarà automaticamente assegnato come DataContext della View.

Un altro esempio è il modo con cui è possibile collegare un controllo (ad esempio, una TextBlock) con il valore da visualizzare al suo interno: è sufficiente dare al controllo lo stesso nome di una proprietà definita nel ViewModel.

Quali sono i vantaggi di Caliburn Micro? Il più importante è che la maggior parte degli sforzi che uno sviluppatore deve fare per supportare tutti gli scenari previsti dal pattern MVVM sono nascosti dal toolkit, dando la possibilità di diventare produttivi il prima possibile in fase di inizio di un nuovo progetto. Inoltre, Caliburn Micro include tanti helper che supportano molti degli scenari specifici di Windows Phone, come tombstoning, navigazione, launcher e chooser, ecc.

I contro, invece, sono che, secondo me, il setup iniziale del progetto è un po’ più complesso da capire e da padroneggiare. Inoltre, il fatto di essere basato su convenzioni è un aiuto importante per lo sviluppatore, ma rende il progetto difficile da comprendere per chiunque debba lavorare sullo stesso senza conoscere Caliburn Micro e non è in grado di capire cosa succede dietro le quinte senza una spiegazioni. AD esempio, dato che non esiste un ViewModelLocator o un’altra classe che gestisce i ViewModel, diventa molto difficile capire come View e ViewModel sono collegati tra loro se non si conosce la convenzione prevista dal toolkit.

E’ importante sottolineare, però, che l’uso delle convenzioni non è obbligatorio: dato che il ViewModel viene semplicemente assegnato come DataContext della View, è possibile utilizzare anche la sintassi standard del binding per collegare gli elementi tra loro.

La pratica… nei prossimi post

Nei prossimi post inizieremo a fare un po’ di pratica con Caliburn e creeremo il nostro primo progetto.

Related Content



Viewing all articles
Browse latest Browse all 41

Trending Articles