Il pattern mvvm come strutturare al meglio il vostro progetto

1,263 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,263
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
28
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Il pattern mvvm come strutturare al meglio il vostro progetto

  1. 1. ITALIAN WEBINAR #6 IL PATTERN MVVM Matteo Pagani Nokia Developer Champion Microsoft MVP – Windows Phone Development Software Engineer @ Funambol
  2. 2. AGENDA • Il pattern MVVM • Toolkit e framework • Caliburn Micro © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  3. 3. IL PATTERN MVVM © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  4. 4. CODE BEHIND • • • • 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 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  5. 5. MODEL-VIEW-VIEWMODEL • • • 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 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  6. 6. MODEL • • 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 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  7. 7. VIEW • • • • 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). © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  8. 8. VIEW MODEL • • • • 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. © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  9. 9. © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  10. 10. INOTIFYPROPERTYCHANGED • • • 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 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  11. 11. INOTIFYPROPERTYCHANGED Before public string Name { get; set; } After private string name; public string Name { get { return name; } set { name = value; NotifyOfPropertyChange(() => Name); } } XAML <TextBlock Text="{Binding Path=Name}" /> © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  12. 12. COMMAND • • • 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 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  13. 13. COMMAND Code private ICommand _pinToStart; Il codice da public ICommand PinToStart eseguire { get { return _pinToStart ?? (_pinToStart = new RelayCommand( () => taskService.PinToStart(CurrentItem), () => canPin)); Il comando è } abilitato? } XAML <Button Content="Pin to start" Command="{Binding Path=PinToStart}" /> © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  14. 14. © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  15. 15. MVVM Demo © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  16. 16. TOOLKIT E FRAMEWORK © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  17. 17. TOOLKIT E FRAMEWORK • • • • 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 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  18. 18. MVVM LIGHT • • • 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 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  19. 19. LE GRANDI DOMANDE • • • Come gestisco la navigazione da una pagina all’altra? Come gestisco il tombstoning? Come gestisco i deep link? © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  20. 20. CALIBURN MICRO • • • 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 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  21. 21. CALIBURN MICRO • • • 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 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  22. 22. CALIBURN MICRO Demo © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  23. 23. CICLO DI VITA DELLA PAGINA • • 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 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  24. 24. CALIBURN E IL CICLO DI VITA DELLA PAGINA Demo © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  25. 25. Grazie! Blog: http://www.qmatteoq.com http://wp.qmatteoq.com Twitter: @qmatteoq Mail: info@qmatteoq.com Materiale su http://sdrv.ms/197qTIa © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

×