SlideShare uma empresa Scribd logo
1 de 21
Introduzione a MVVM Massimo Bonanni massimo.bonanni@domusdotnet.org	http://codetailor.blogspot.com http://twitter.com/massimobonanni
Agenda I Pattern, questi sconosciuti Da MVC a MVVM, un pò di storia MVVM e Presentation Framework Client Shared Bookshelf Manager Avviciniamoci a Caliburn.Micro
I Pattern, questi sconosciuti Un pattern è «una soluzione progettuale generale a un problema ricorrente»; Utilizzare un pattern significa : non dover «inventare la ruota» ogni volta; risolvere il problema in maniera «standard» garantendo: Comprensibilità del software; Manutenibilità del software; Ottimizzazione del software.
I Pattern, questi sconosciuti Esistono diversi tipi di Pattern: I pattern della «banda dei quattro»: Pattern creazionali (ed esempio il Singleton); Pattern strutturali (ad esempio l’Adapter); Pattern comportamentali ( ad esempio l’Iterator). I pattern architetturali: sono tutti quei patterns che definiscono l’organizzazione strutturale di un sistema (ad esempio MVC); I pattern di metodologia; I pattern di concorrenza.
In principio era MVC: la genealogia di MVVM 1979 1990 2004 2005
Briciole di MVC Pattern architetturale pensato nel 1979 da TrygveReenskaugper Smalltalk; Scopo del pattern è quello di separare in manieranettatuttociòchefa parte della UI da ciòche è logica di dominioconsentendounamaggioremodularità e testabilità; MVC è l’acronimo di Model-View-Controller: Model : implementa la logica "business", ovvero quell'insieme di regole e comportamenti che attengono puramente al dominio del problema trattato (algoritmi di calcolo, validazione dei dati, ecc.). Il Model è agnostico rispetto alla tecnologia usata per la UI;  View : si tratta, sostanzialmente della UI (presentazione dati, interazione con l’utente, etc., etc.); Controller : è la parte che svolge il ruolo di coordinamento e mediazione degli altri componenti;
MVC in Action Controller Notifica interazione utente Invocazione Model 1 2 Model View 4 3 La view «osserva» il Model La View si aggiorna
MVC in Action
Briciole di MVP  Nel pattern MVP, il ruolo del controller diventa quello di orchestratore tra View e Model; La View, rispetto a MVC, è in grado di: Gestire (in virtù di unamiglioratatecnologia) direttamente le “gesture” dell’utente; Gestire la maggior parte delleattività di presentazione (purchè la logicasiasemplice e non sia di dominio); Esistono due «flavour»: Supervising Controller: la view è in grado di interagire (tipicamente con il pattern observer) con il model; Passive View: la view è «passiva» ed è interamente il presenter ad interagire con il model.
MVP Passive View Presenter Notifica interazione utente Invocazione Model 2 1 3 Model View Aggiornamento della View
MVP Passive View
Briciole di PM e MVVM  ”Presentation Model pulls the state and behavior of the view out into a model class that is part of the presentation. The Presentation Model coordinates with the domain layer and provides an interface to the view that minimizes decision making in the view. The view either stores all its state in the Presentation Model or synchonizes its state with Presentation Model frequently” Martin Fowler (http://martinfowler.com/eaaDev/PresentationModel.html)
Briciole di PM e MVVM  MVVM altro non è che una «specializzazione» idiomatica di PM basata sulla tecnologia del presentation Framework di Microsoft; Introdotto da John Grossman durante lo sviluppo di WPF; Il ViewModel rappresenta, in maniera astratta, tutte le informazioni ed i comportamenti della corrispondente View; La View si limita a visualizzare graficamente quanto esposto dal ViewModel; Di fondamentale importanza l’esistenza del motore di DataBinding del Presentation Framework.
Model View ViewModel View Model Notifica interazione utente (Command) Invocazione Model 1 2 3 Model View Aggiornamento della View (PropertyChanged)
Model View ViewModel – Command
Model View ViewModel – Property Changed
DEMO Il client di Shared Bookshelf Manager
Riferimenti a Caliburn.Micro Sito web: 	http://caliburnmicro.codeplex.com/
Installare Caliburn.Micro Download dal sito web e reference delle dll; Aggiunta delle reference con NuGet:
DEMO Caliburn.Micro e Nuget
Sponsor

Mais conteúdo relacionado

Destaque

Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
Svetlin Nakov
 
Работа с Естествен Интелект – Личност – Време – 3 юли 2013 @ НЛП клуб
Работа с Естествен Интелект – Личност – Време – 3 юли 2013 @ НЛП клубРабота с Естествен Интелект – Личност – Време – 3 юли 2013 @ НЛП клуб
Работа с Естествен Интелект – Личност – Време – 3 юли 2013 @ НЛП клуб
Svetlin Nakov
 
Regular Expressions: QA Challenge Accepted Conf (March 2015)
Regular Expressions: QA Challenge Accepted Conf (March 2015)Regular Expressions: QA Challenge Accepted Conf (March 2015)
Regular Expressions: QA Challenge Accepted Conf (March 2015)
Svetlin Nakov
 
Architetttura Della Soluzione
Architetttura Della SoluzioneArchitetttura Della Soluzione
Architetttura Della Soluzione
Luca Milan
 

Destaque (17)

Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
 
Професия "програмист"
Професия "програмист"Професия "програмист"
Професия "програмист"
 
Dependency Injection and Inversion Of Control
Dependency Injection and Inversion Of ControlDependency Injection and Inversion Of Control
Dependency Injection and Inversion Of Control
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
 
Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Как да станем софтуерни инженери и да стартираме ИТ бизнес?Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Как да станем софтуерни инженери и да стартираме ИТ бизнес?
 
Работа с Естествен Интелект – Личност – Време – 3 юли 2013 @ НЛП клуб
Работа с Естествен Интелект – Личност – Време – 3 юли 2013 @ НЛП клубРабота с Естествен Интелект – Личност – Време – 3 юли 2013 @ НЛП клуб
Работа с Естествен Интелект – Личност – Време – 3 юли 2013 @ НЛП клуб
 
Regular Expressions: QA Challenge Accepted Conf (March 2015)
Regular Expressions: QA Challenge Accepted Conf (March 2015)Regular Expressions: QA Challenge Accepted Conf (March 2015)
Regular Expressions: QA Challenge Accepted Conf (March 2015)
 
Architetttura Della Soluzione
Architetttura Della SoluzioneArchitetttura Della Soluzione
Architetttura Della Soluzione
 
UI Composition
UI CompositionUI Composition
UI Composition
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015
 
WPF MVVM Toolkit
WPF MVVM ToolkitWPF MVVM Toolkit
WPF MVVM Toolkit
 
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVM
 
Design Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionDesign Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency Injection
 
Layered Software Architecture
Layered Software ArchitectureLayered Software Architecture
Layered Software Architecture
 

Semelhante a Introduzione a MVVM e Caliburn.Micro

Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
Andrea Saltarello
 
Win8@work - Windows 8 e MVVM
Win8@work - Windows 8 e MVVMWin8@work - Windows 8 e MVVM
Win8@work - Windows 8 e MVVM
Marco Amendola
 
Usare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web ApplicationUsare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web Application
extrategy
 

Semelhante a Introduzione a MVVM e Caliburn.Micro (20)

Model-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store AppsModel-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store Apps
 
Mvvm
MvvmMvvm
Mvvm
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.Micro
 
Alessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVC
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
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
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniserviziLe 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
 
Win8@work - Windows 8 e MVVM
Win8@work - Windows 8 e MVVMWin8@work - Windows 8 e MVVM
Win8@work - Windows 8 e MVVM
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 
Applicazioni web con Asp.Net MVC 6
Applicazioni web con Asp.Net MVC 6Applicazioni web con Asp.Net MVC 6
Applicazioni web con Asp.Net MVC 6
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Introduzione all'ALM
Introduzione all'ALMIntroduzione all'ALM
Introduzione all'ALM
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1
 
Usare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web ApplicationUsare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web Application
 
Riuso Object Oriented
Riuso Object OrientedRiuso Object Oriented
Riuso Object Oriented
 
Infosecurity 2008
Infosecurity 2008Infosecurity 2008
Infosecurity 2008
 

Mais de Massimo Bonanni

Mais de Massimo Bonanni (20)

Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!
 
Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!
 
Stateful pattern con Azure Functions
Stateful pattern con Azure FunctionsStateful pattern con Azure Functions
Stateful pattern con Azure Functions
 
Architetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure FunctionsArchitetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure Functions
 
IoT in salsa serverless
IoT in salsa serverlessIoT in salsa serverless
IoT in salsa serverless
 
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
 
Stateful patterns in Azure Functions
Stateful patterns in Azure FunctionsStateful patterns in Azure Functions
Stateful patterns in Azure Functions
 
IoT in salsa Serverless
IoT in salsa ServerlessIoT in salsa Serverless
IoT in salsa Serverless
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoring
 
Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoring
 
Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...
 
Workflow as code with Azure Durable Functions
Workflow as code with Azure Durable FunctionsWorkflow as code with Azure Durable Functions
Workflow as code with Azure Durable Functions
 
Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!
 
Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor model
 
Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor model
 
Soluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie MicrosoftSoluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie Microsoft
 
Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!
 

Introduzione a MVVM e Caliburn.Micro

  • 1. Introduzione a MVVM Massimo Bonanni massimo.bonanni@domusdotnet.org http://codetailor.blogspot.com http://twitter.com/massimobonanni
  • 2. Agenda I Pattern, questi sconosciuti Da MVC a MVVM, un pò di storia MVVM e Presentation Framework Client Shared Bookshelf Manager Avviciniamoci a Caliburn.Micro
  • 3. I Pattern, questi sconosciuti Un pattern è «una soluzione progettuale generale a un problema ricorrente»; Utilizzare un pattern significa : non dover «inventare la ruota» ogni volta; risolvere il problema in maniera «standard» garantendo: Comprensibilità del software; Manutenibilità del software; Ottimizzazione del software.
  • 4. I Pattern, questi sconosciuti Esistono diversi tipi di Pattern: I pattern della «banda dei quattro»: Pattern creazionali (ed esempio il Singleton); Pattern strutturali (ad esempio l’Adapter); Pattern comportamentali ( ad esempio l’Iterator). I pattern architetturali: sono tutti quei patterns che definiscono l’organizzazione strutturale di un sistema (ad esempio MVC); I pattern di metodologia; I pattern di concorrenza.
  • 5. In principio era MVC: la genealogia di MVVM 1979 1990 2004 2005
  • 6. Briciole di MVC Pattern architetturale pensato nel 1979 da TrygveReenskaugper Smalltalk; Scopo del pattern è quello di separare in manieranettatuttociòchefa parte della UI da ciòche è logica di dominioconsentendounamaggioremodularità e testabilità; MVC è l’acronimo di Model-View-Controller: Model : implementa la logica "business", ovvero quell'insieme di regole e comportamenti che attengono puramente al dominio del problema trattato (algoritmi di calcolo, validazione dei dati, ecc.). Il Model è agnostico rispetto alla tecnologia usata per la UI; View : si tratta, sostanzialmente della UI (presentazione dati, interazione con l’utente, etc., etc.); Controller : è la parte che svolge il ruolo di coordinamento e mediazione degli altri componenti;
  • 7. MVC in Action Controller Notifica interazione utente Invocazione Model 1 2 Model View 4 3 La view «osserva» il Model La View si aggiorna
  • 9. Briciole di MVP Nel pattern MVP, il ruolo del controller diventa quello di orchestratore tra View e Model; La View, rispetto a MVC, è in grado di: Gestire (in virtù di unamiglioratatecnologia) direttamente le “gesture” dell’utente; Gestire la maggior parte delleattività di presentazione (purchè la logicasiasemplice e non sia di dominio); Esistono due «flavour»: Supervising Controller: la view è in grado di interagire (tipicamente con il pattern observer) con il model; Passive View: la view è «passiva» ed è interamente il presenter ad interagire con il model.
  • 10. MVP Passive View Presenter Notifica interazione utente Invocazione Model 2 1 3 Model View Aggiornamento della View
  • 12. Briciole di PM e MVVM ”Presentation Model pulls the state and behavior of the view out into a model class that is part of the presentation. The Presentation Model coordinates with the domain layer and provides an interface to the view that minimizes decision making in the view. The view either stores all its state in the Presentation Model or synchonizes its state with Presentation Model frequently” Martin Fowler (http://martinfowler.com/eaaDev/PresentationModel.html)
  • 13. Briciole di PM e MVVM MVVM altro non è che una «specializzazione» idiomatica di PM basata sulla tecnologia del presentation Framework di Microsoft; Introdotto da John Grossman durante lo sviluppo di WPF; Il ViewModel rappresenta, in maniera astratta, tutte le informazioni ed i comportamenti della corrispondente View; La View si limita a visualizzare graficamente quanto esposto dal ViewModel; Di fondamentale importanza l’esistenza del motore di DataBinding del Presentation Framework.
  • 14. Model View ViewModel View Model Notifica interazione utente (Command) Invocazione Model 1 2 3 Model View Aggiornamento della View (PropertyChanged)
  • 15. Model View ViewModel – Command
  • 16. Model View ViewModel – Property Changed
  • 17. DEMO Il client di Shared Bookshelf Manager
  • 18. Riferimenti a Caliburn.Micro Sito web: http://caliburnmicro.codeplex.com/
  • 19. Installare Caliburn.Micro Download dal sito web e reference delle dll; Aggiunta delle reference con NuGet: