Il pattern mvvm come strutturare al meglio il vostro progetto

25
IL PATTERN MVVM Matteo Pagani Nokia Developer Champion Microsoft MVP – Windows Phone Development Software Engineer @ Funambol ITALIAN WEBINAR #6

description

Quando ci si trova nella necessità di sviluppare applicazioni per Microsoft Windows Phone più complesse, l'approccio tradizionale mostra qualche limite: non c'è una separazione tra i vari strati dell'applicazione e il codice è più difficile da testare e da mantenere. Questo webinar vi mostrerà le basi del pattern Model-View-ViewModel (MVVM), che offre un approccio più strutturato, in grado di separare la parte di logica dall'interfaccia grafica. / When you need to develop complex applications for Microsoft Windows Phone, the traditional approach shows some limitations. This webinar will show you the basics of Model-View-ViewModel (MVVM), which offers a more structured approach.

Transcript of Il pattern mvvm come strutturare al meglio il vostro progetto

Page 1: Il pattern mvvm come strutturare al meglio il vostro progetto

IL PATTERN MVVM

Matteo Pagani

Nokia Developer Champion

Microsoft MVP – Windows Phone Development

Software Engineer @ Funambol

ITALIAN WEBINAR #6

Page 2: Il pattern mvvm come strutturare al meglio il vostro progetto

AGENDA

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

• Il pattern MVVM • Toolkit e framework • Caliburn Micro

Page 3: Il pattern mvvm come strutturare al meglio il vostro progetto

IL PATTERN MVVM

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 4: Il pattern mvvm come strutturare al meglio il vostro progetto

• Nell’approccio abituale, la logica viene scritta nel code behind, insieme al codice per gestire le interazioni con l’interfaccia grafica

• E’ difficile separare i due contesti e identificare i problemi

• E’ difficile scrivere test, perché richiederebbe la simulazione delle interazioni con l’interfaccia grafica

• E’ difficile per un designer lavorare sulla grafica senza conoscere i dettagli implementativi

CODE BEHIND

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 5: Il pattern mvvm come strutturare al meglio il vostro progetto

• Aiuta a separare logica e interfaccia utente, aiutando a mantenere leggibilità, testabilità, manutenibilità e «blendability»

• Prevede la separazione del codice in tre strati differenti

• Sfrutta le caratteristiche principali del linguaggio XAML, come DataContext e binding, per collegare i vari strati tra di loro

MODEL-VIEW-VIEWMODEL

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 6: Il pattern mvvm come strutturare al meglio il vostro progetto

• Rappresenta le entità e i servizi che recuperano i dati necessari all’applicazione in maniera “grezza”, senza avere dipendenze da come devono essere presentati

• Alcuni esempi:

• La definizione delle entità base

• Interazione con un database

• Interazione con un servizio REST o WCF

• Download di file dalla rete

MODEL

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 7: Il pattern mvvm come strutturare al meglio il vostro progetto

• Rappresenta l’interfaccia grafica dell’applicazione

• Contiene tutti i controlli, le animazioni e gli effetti visuali che definiscono la UI dell’applicazione.

• Il linguaggio di riferimento per le tecnologie Windows 8 e Windows Phone è lo XAML.

• Il code behind non deve contenere logica, ma al massimo codice necessario per gestire elementi dell’interfaccia (ad esempio, animazioni).

VIEW

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 8: Il pattern mvvm come strutturare al meglio il vostro progetto

• E’ il punto di contatto tra View e Model

• Si occupa di prendere i dati grezzi esposti dal Model e di elaborarli per essere presentati dalla View.

• Il ViewModel viene assegnato come DataContext della pagina: di conseguenza, tutti i controlli possono accedere alle proprietà del ViewModel

• Sfrutta il concetto di binding, per creare un canale bidirezionale di comunicazione tra le proprietà del ViewModel i e controlli presenti nello XAML.

VIEW MODEL

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 9: Il pattern mvvm come strutturare al meglio il vostro progetto

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 10: Il pattern mvvm come strutturare al meglio il vostro progetto

• E’ l’interfaccia che deve essere implementata da qualsiasi classe che interagisce con la View (nello specifico del pattern, dai ViewModel)

• Consente di propagare le modifiche fatte alle proprietà di un oggetto ai controlli nella View collegati

• ObservableCollection<T> è un tipo particolare di collezione che implementa INotifyPropertyChanged

INOTIFYPROPERTYCHANGED

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 11: Il pattern mvvm come strutturare al meglio il vostro progetto

Before

public string Name { get; set; }

INOTIFYPROPERTYCHANGED

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

After

private string name;

public string Name

{

get { return name; }

set

{

name = value;

NotifyOfPropertyChange(() => Name);

}

}

XAML

<TextBlock Text="{Binding Path=Name}" />

Page 12: Il pattern mvvm come strutturare al meglio il vostro progetto

• I command sono funzioni che possono essere associate ad una azione su un controllo, grazie alla proprietà Command

• A differenza degli event handler, possono essere associati ad un controllo tramite binding

• Supportano la gestione dello stato del comando (abilitato o disabilitato), che si riflette in automatico sullo stato del controllo

COMMAND

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 13: Il pattern mvvm come strutturare al meglio il vostro progetto

Code

private ICommand _pinToStart;

public ICommand PinToStart

{

get

{

return _pinToStart

?? (_pinToStart = new RelayCommand(

() => taskService.PinToStart(CurrentItem),

() => canPin));

}

}

XAML

<Button Content="Pin to start" Command="{Binding Path=PinToStart}" />

COMMAND

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Il codice da eseguire

Il comando è abilitato?

Page 14: Il pattern mvvm come strutturare al meglio il vostro progetto

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 15: Il pattern mvvm come strutturare al meglio il vostro progetto

MVVM Demo

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 16: Il pattern mvvm come strutturare al meglio il vostro progetto

TOOLKIT E FRAMEWORK

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 17: Il pattern mvvm come strutturare al meglio il vostro progetto

• MVVM è un pattern, non una libreria

• Le librerie disponibili non rappresentano MVVM, ma aiutano a implementare MVVM

• I toolkit offrono gli strumenti base per implementare il pattern e tendono ad essere indipendenti dalla piattaforma

• I framework offrono strumenti per gestire con il pattern MVVM i casi d’uso più comuni della piattaforma

TOOLKIT E FRAMEWORK

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 18: Il pattern mvvm come strutturare al meglio il vostro progetto

• Toolkit di Laurent Bugnion (http://mvvmlight.codeplex.com/)

• Compatibile con tutte le tecnologie XAML / C# (Silverlight, WPF, Windows Phone, Windows Store app)

• Alcune caratteristiche:

• Classe base per i ViewModel con supporto a INotifyPropertyChanged

• Classe base per implementare i Command

• Messenger per scambiare messaggi tra i ViewModel

MVVM LIGHT

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 19: Il pattern mvvm come strutturare al meglio il vostro progetto

• Come gestisco la navigazione da una pagina all’altra?

• Come gestisco il tombstoning?

• Come gestisco i deep link?

LE GRANDI DOMANDE

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 20: Il pattern mvvm come strutturare al meglio il vostro progetto

• Framework ideato da Rob Eisenberg (http://caliburnmicro.codeplex.com)

• Compatibile con tutte le tecnologie XAML / C#

• Feature specifiche per Windows Phone:

• Supporto alla navigazione e al ciclo di vita delle pagine

• Supporto al tombstoning

• Supporto ai launcher & chooser

• Supporto alla gestione di liste

CALIBURN MICRO

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 21: Il pattern mvvm come strutturare al meglio il vostro progetto

• Supporta le naming convention: non è necessario effettuare il binding manualmente, è sufficiente seguire alcune convenzioni sui nomi delle proprietà o dei metodi

• Esempi:

• MainView -> MainViewModel per avere il binding tra View e ViewModel

• x:Name di un controllo TextBlock = nome di una proprietà nel ViewModel per il binding

• x:Name di un controllo Button = nome di un metodo nel ViewModel per il command da eseguire

• E’ supportato comunque l’approccio tradizionale

CALIBURN MICRO

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 22: Il pattern mvvm come strutturare al meglio il vostro progetto

CALIBURN MICRO Demo

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 23: Il pattern mvvm come strutturare al meglio il vostro progetto

• E’ sufficiente ereditare il ViewModel dalla classe Screen per avere accesso agli eventi:

• OnInitialize(), quando la pagina viene inizializzata la prima volta

• OnActivate(), quando la pagina viene visualizzata (OnNavigatedTo)

• OnDeactivate(), quando l’utente lascia la pagina corrente (OnNavigatedFrom)

• Approccio ViewModel first con supporto ai parametri

CICLO DI VITA DELLA PAGINA

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 24: Il pattern mvvm come strutturare al meglio il vostro progetto

CALIBURN E IL CICLO DI VITA DELLA PAGINA Demo

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 25: Il pattern mvvm come strutturare al meglio il vostro progetto

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Grazie!

Blog:

http://www.qmatteoq.com

http://wp.qmatteoq.com

Twitter: @qmatteoq

Mail: [email protected]

Materiale su http://sdrv.ms/197qTIa