SlideShare a Scribd company logo
1 of 25
Download to read offline
ITALIAN WEBINAR #6

IL PATTERN MVVM
Matteo Pagani
Nokia Developer Champion
Microsoft MVP – Windows Phone Development
Software Engineer @ Funambol
AGENDA
• Il pattern MVVM
• Toolkit e framework
• Caliburn Micro

© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
IL PATTERN
MVVM
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
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.
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.
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.
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.
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.
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
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.
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.
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.
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.
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
MVVM
Demo

© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
TOOLKIT E
FRAMEWORK

© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
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.
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.
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.
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.
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.
CALIBURN MICRO
Demo

© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
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.
CALIBURN E IL
CICLO DI VITA
DELLA PAGINA
Demo

© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
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.

More Related Content

Viewers also liked

Dependency Injection in .NET
Dependency Injection in .NETDependency Injection in .NET
Dependency Injection in .NETRemik Koczapski
 
Dependency injection and inversion
Dependency injection and inversionDependency injection and inversion
Dependency injection and inversionchhabraravish23
 
Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!benfante
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008Mauro Servienti
 
Introduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.MicroIntroduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.MicroMassimo Bonanni
 
Workshop - cqrs brief introduction
Workshop - cqrs brief introductionWorkshop - cqrs brief introduction
Workshop - cqrs brief introductionFrancesco Garavaglia
 
Design Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionDesign Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionRiccardo Cardin
 

Viewers also liked (11)

m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Dependency Injection in .NET
Dependency Injection in .NETDependency Injection in .NET
Dependency Injection in .NET
 
Dependency injection and inversion
Dependency injection and inversionDependency injection and inversion
Dependency injection and inversion
 
Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
 
Introduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.MicroIntroduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.Micro
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
IOC in Unity
IOC in Unity  IOC in Unity
IOC in Unity
 
IOC in unity
IOC in unityIOC in unity
IOC in unity
 
Workshop - cqrs brief introduction
Workshop - cqrs brief introductionWorkshop - cqrs brief introduction
Workshop - cqrs brief introduction
 
Design Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionDesign Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency Injection
 

Similar to Il pattern mvvm come strutturare al meglio il vostro progetto

Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Mauro Servienti
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfFlorence Consulting
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLSinergia Totale
 
Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store appsDotNetCampus
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angulardotnetcode
 
MVVMCross da Windows Phone a Windows 8 passando per Android e iOS
MVVMCross da Windows Phone a Windows 8 passando per Android e iOSMVVMCross da Windows Phone a Windows 8 passando per Android e iOS
MVVMCross da Windows Phone a Windows 8 passando per Android e iOSDan Ardelean
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsGiorgio Di Nardo
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMCodemotion
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Accesso ai Dati in Windows Phone: Isolated Storage, Database e Data Sharing
Accesso ai Dati in Windows Phone: Isolated Storage, Database e Data SharingAccesso ai Dati in Windows Phone: Isolated Storage, Database e Data Sharing
Accesso ai Dati in Windows Phone: Isolated Storage, Database e Data SharingMicrosoft Mobile Developer
 
BPM e Cloud: la partnership ideale
BPM e Cloud: la partnership idealeBPM e Cloud: la partnership ideale
BPM e Cloud: la partnership idealeemanuelemolteni
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMarco Amendola
 
Evoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservicesEvoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservicesDaniele Mondello
 

Similar to Il pattern mvvm come strutturare al meglio il vostro progetto (20)

Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010
 
WPF MVVM Toolkit
WPF MVVM ToolkitWPF MVVM Toolkit
WPF MVVM Toolkit
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdf
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
 
Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store apps
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
MVVMCross da Windows Phone a Windows 8 passando per Android e iOS
MVVMCross da Windows Phone a Windows 8 passando per Android e iOSMVVMCross da Windows Phone a Windows 8 passando per Android e iOS
MVVMCross da Windows Phone a Windows 8 passando per Android e iOS
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
 
UI Composition
UI CompositionUI Composition
UI Composition
 
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
Accesso ai Dati in Windows Phone: Isolated Storage, Database e Data Sharing
Accesso ai Dati in Windows Phone: Isolated Storage, Database e Data SharingAccesso ai Dati in Windows Phone: Isolated Storage, Database e Data Sharing
Accesso ai Dati in Windows Phone: Isolated Storage, Database e Data Sharing
 
m-v-vm @ dotNetMarche
m-v-vm @ dotNetMarchem-v-vm @ dotNetMarche
m-v-vm @ dotNetMarche
 
OpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studioOpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studio
 
BPM e Cloud: la partnership ideale
BPM e Cloud: la partnership idealeBPM e Cloud: la partnership ideale
BPM e Cloud: la partnership ideale
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.Micro
 
Evoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservicesEvoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservices
 

More from Microsoft Mobile Developer

Intro to Nokia X software platform 2.0 and tools
Intro to Nokia X software platform 2.0 and toolsIntro to Nokia X software platform 2.0 and tools
Intro to Nokia X software platform 2.0 and toolsMicrosoft Mobile Developer
 
Location based services for Nokia X and Nokia Asha using Geo2tag
Location based services for Nokia X and Nokia Asha using Geo2tagLocation based services for Nokia X and Nokia Asha using Geo2tag
Location based services for Nokia X and Nokia Asha using Geo2tagMicrosoft Mobile Developer
 
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultations
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultationsLumia App Labs: Lessons learned from 50 windows phone 8 design consultations
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultationsMicrosoft Mobile Developer
 
Windows Phone 8 speech: parliamo con la nostra app
Windows Phone 8 speech: parliamo con la nostra appWindows Phone 8 speech: parliamo con la nostra app
Windows Phone 8 speech: parliamo con la nostra appMicrosoft Mobile Developer
 
La pubblicazione di un'applicazione sullo store
La pubblicazione di un'applicazione sullo storeLa pubblicazione di un'applicazione sullo store
La pubblicazione di un'applicazione sullo storeMicrosoft Mobile Developer
 
Lens app trasformare il telefono in una fotocamera
Lens app trasformare il telefono in una fotocameraLens app trasformare il telefono in una fotocamera
Lens app trasformare il telefono in una fotocameraMicrosoft Mobile Developer
 

More from Microsoft Mobile Developer (20)

Intro to Nokia X software platform 2.0 and tools
Intro to Nokia X software platform 2.0 and toolsIntro to Nokia X software platform 2.0 and tools
Intro to Nokia X software platform 2.0 and tools
 
Lumia App Labs: Lumia SensorCore SDK beta
Lumia App Labs: Lumia SensorCore SDK betaLumia App Labs: Lumia SensorCore SDK beta
Lumia App Labs: Lumia SensorCore SDK beta
 
Nokia Asha from idea to app - Imaging
Nokia Asha from idea to app - ImagingNokia Asha from idea to app - Imaging
Nokia Asha from idea to app - Imaging
 
Healthcare apps for Nokia X and Nokia Asha
Healthcare apps for Nokia X and Nokia AshaHealthcare apps for Nokia X and Nokia Asha
Healthcare apps for Nokia X and Nokia Asha
 
Push notifications on Nokia X
Push notifications on Nokia XPush notifications on Nokia X
Push notifications on Nokia X
 
DIY Nokia Asha app usability studies
DIY Nokia Asha app usability studiesDIY Nokia Asha app usability studies
DIY Nokia Asha app usability studies
 
Lessons learned from Nokia X UI reviews
Lessons learned from Nokia X UI reviewsLessons learned from Nokia X UI reviews
Lessons learned from Nokia X UI reviews
 
Location based services for Nokia X and Nokia Asha using Geo2tag
Location based services for Nokia X and Nokia Asha using Geo2tagLocation based services for Nokia X and Nokia Asha using Geo2tag
Location based services for Nokia X and Nokia Asha using Geo2tag
 
HERE Maps for the Nokia X platform
HERE Maps for the Nokia X platformHERE Maps for the Nokia X platform
HERE Maps for the Nokia X platform
 
Nokia In-App Payment - UX considerations
Nokia In-App Payment - UX considerationsNokia In-App Payment - UX considerations
Nokia In-App Payment - UX considerations
 
Introduction to Nokia Asha SDK 1.2 (beta)
Introduction to Nokia Asha SDK 1.2 (beta)Introduction to Nokia Asha SDK 1.2 (beta)
Introduction to Nokia Asha SDK 1.2 (beta)
 
UX considerations when porting to Nokia X
UX considerations when porting to Nokia XUX considerations when porting to Nokia X
UX considerations when porting to Nokia X
 
Kids' games and educational app design
Kids' games and educational app designKids' games and educational app design
Kids' games and educational app design
 
Nokia X: opportunities for developers
Nokia X: opportunities for developersNokia X: opportunities for developers
Nokia X: opportunities for developers
 
Lumia App Labs: Nokia Imaging SDK 1.1
Lumia App Labs: Nokia Imaging SDK 1.1Lumia App Labs: Nokia Imaging SDK 1.1
Lumia App Labs: Nokia Imaging SDK 1.1
 
Intro to Nokia X software platform and tools
Intro to Nokia X software platform and toolsIntro to Nokia X software platform and tools
Intro to Nokia X software platform and tools
 
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultations
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultationsLumia App Labs: Lessons learned from 50 windows phone 8 design consultations
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultations
 
Windows Phone 8 speech: parliamo con la nostra app
Windows Phone 8 speech: parliamo con la nostra appWindows Phone 8 speech: parliamo con la nostra app
Windows Phone 8 speech: parliamo con la nostra app
 
La pubblicazione di un'applicazione sullo store
La pubblicazione di un'applicazione sullo storeLa pubblicazione di un'applicazione sullo store
La pubblicazione di un'applicazione sullo store
 
Lens app trasformare il telefono in una fotocamera
Lens app trasformare il telefono in una fotocameraLens app trasformare il telefono in una fotocamera
Lens app trasformare il telefono in una fotocamera
 

Recently uploaded

Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 

Recently uploaded (9)

Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 

Il pattern mvvm come strutturare al meglio il vostro progetto

  • 1. ITALIAN WEBINAR #6 IL PATTERN MVVM Matteo Pagani Nokia Developer Champion Microsoft MVP – Windows Phone Development Software Engineer @ Funambol
  • 2. AGENDA • Il pattern MVVM • Toolkit e framework • Caliburn Micro © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  • 3. IL PATTERN MVVM © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  • 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. 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. 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. 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. 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. © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  • 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. 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. 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. 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. © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  • 15. MVVM Demo © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  • 16. TOOLKIT E FRAMEWORK © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  • 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. 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. 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. 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. 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. CALIBURN MICRO Demo © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  • 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. CALIBURN E IL CICLO DI VITA DELLA PAGINA Demo © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
  • 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.