1. Windows 8 e MVVM
Marco Amendola
marcoamendola.wordpress.com
blogs.ugidotnet.org/marcoamendola
marco.amendola@domusdotnet.org
@marcoamendola
2. Cosa vedremo?
• MVVM: cosa cambia con Xaml su WinRT?
• Cos’è MVVM e perché si usa
• Caliburn.Micro per WinRT: struttura, vantaggi
tecnici e qualitativi
• Binding delle proprietà del ViewModel
• Avvio di azioni; azioni asincrone
• UI composition
• Unit test
3. Windows 8 e MVVM
MVVM. Ancora?!
Ma è una fissazione!
4. Windows 8 e MVVM
Quanto e come cambia
MVVM applicato a Xaml su
WinRT?
• Differenze dovute al markup
• Differenze dovute al runtime
• Differenze nel modello
applicativo
5. Cos’è MVVM e perché si usa
E’ un pattern
Indica una impostazione
sperimentata e conveniente
L’uso in contesti Enterprise
ha dimostrato che facilita:
• Qualità
• Manutenibilità
• Modularità
6. Cos’è MVVM e perché si usa
Strumenti per app. LOB
• MVVM, Caliburn.Micro, Fody
Rinforzo positivo di buone
pratiche e convenzioni
• Convention over
Configuration
• Inversion of Control
• Testabilità
7. Windows 8 e MVVM
@Work
Struttura di una soluzione Caliburn.Micro
8. Windows 8 e MVVM
Binding delle proprietà
• del DataModel: il classico
utilizzo per la presentazione
di dati
• dello Screen: pattern
Presentation Model (la View
replica lo stato del Model)
9. Windows 8 e MVVM
@Work
Diversi tipi di binding delle proprietà
Convenzioni
Casi «pelosi» con proprietà non «bindabili»
10. Windows 8 e MVVM
INotifyPropertyChanged?
Fody. E potete dimenticarvene.
12. Windows 8 e MVVM
Cos’è allora il ViewModel?
Vista del Modello
o Modello della Vista
13. Windows 8 e MVVM
Avvio di attività
• approccio tipico:
Commands.
• Caliburn.Micro: convenzioni.
E se non basta: messaggi.
14. Windows 8 e MVVM
@Work
Avvio di azioni con Caliburn.Micro
Convenzioni e ActionMessages
Test sulle funzioni «guard»
15. Windows 8 e MVVM
Azioni asincrone
• Async/Await risolve
elegantemente un problema
complesso (“bagno di
sangue”)
• Percorso sequenziale
visibile, ma composto da
passi potenzialmente
asincroni e di lunga durata
16. Windows 8 e MVVM
@Work
Azioni asincrone
Gestione errori
17. Windows 8 e MVVM
UI Composition
• “Subroutine” per l’interfaccia
utente
• Templating
• VM esposti da proprietà
modificate a runtime
18. Windows 8 e MVVM
UI Composition
• Occorre gestire il ciclo di vita
dei View Model
• Appication Model
19. Windows 8 e MVVM
@Work
UI Composition e Application Model
20. Cosa abbiamo visto*
*se non ho sforato i tempi
• MVVM: cosa cambia con Xaml su WinRT?
• Cos’è MVVM e perché si usa
• Caliburn.Micro per WinRT: struttura, vantaggi
tecnici e qualitativi
• Binding delle proprietà del ViewModel
• Avvio di azioni; azioni asincrone
• UI composition
• Unit test
A causadeicontesti in cui lavoro, mi interessaprincipalmentel’aspettoarchitetturale.Vi mostroperché serve, ha sensoed è rilevante per le applicazioniaziendali.Non solo per le demo e per le piccolo app, ma programmi con tanti moduli, quintali di funzioni, ceste di form dati.
E’ importantenell’enterprisesia per l’evoluzione e per il cross-compilation.Le nuove app hanno UI miste WPF/RT, touch friendly e asincrone (fast & fluid)Markup: namespace differenti, sintassi alias, controllidifferentiRuntime: reflection (codicecondizionale), class library diversaModelloapplicativo: ciclo di vita (avvio, chiusura, sospensione/tombstoning)
Non è un must: se ne può fare a meno. Peròusarlorendepiùgestibili le app complesse. Non necessariamentequellesemplici. Ma unavoltaabituati, non se ne può fare a meno.
Strumentiutilinelle app enterprise Vantaggi di MVVM: ottimaorganizzazione del codice, SoC, espressivitàVantaggi di Caliburn.Micro: uniformitàtrapiattaformeXamlVantaggi di Fody: non sivede. CoC: comodo e al contemporigorosoIoC: vedi http://kozmic.pl/2012/10/23/ioc-container-solves-a-problem-you-might-not-have-but-its-a-nice-problem-to-have/Testing: lo vedremo DURANTE le demo.
Cartelle. Convenzionedeinomidelle view, App.Test con isolamentointerfacciaIBackend
Proprietà del DMTopicInfoView: evidenziare binding convenzionaleedesplicito. Demo: pulsante Mess Around che cambia ititoliProprietà del VM- TopicInfoView: binding a DisplayName. Demo: pulsante Mess Around che cambia ititoli- TopicInfoView: binding a IsBusy. Applicazione del PMBinding peloso: SelectedTopics
Estension + Enable prj + NuGet
Chiarimentosullanatura del VM. La secondaaccezionerende facile sostituire la vista (piattaforme o scenaridiversi)
Funzionamento dei command. I messaggi come alternativepotentedei command (hanno + capacità: bubbling, contesto, DSL)
Azioni semplici: HomeViewModel.MessAroundWithTilesMessaggio:GridView.ItemClickFunzioni Guard. Test
Riferimento a sessione Massimo (non solo threading, ma overlapped I/O e UI)Parlaredellecoroutine come soluzione pre-4.5, come strato di compatibilità a ALTRI USI