SlideShare uma empresa Scribd logo
1 de 7
Sviluppare con MVVM
in Android
Lorenzo Maiorfi
Innovactive Engineering
Pattern MVVM






É uno dei design pattern relativi all’area
«presentation/ui»
Introdotto da Microsoft come
specializzazione del Presentation Model di
Martin Fowler
Deriva dal pattern MVC, dal quale eredita il
principale obiettivo di…
…ottenere una netta separazione delle
responsabilità tra i diversi moduli
coinvolti nella gestione della UI di
un’applicazione
Componenti






MODEL : è costituito dall’insieme dei moduli
che contribuiscono ad implementare la
logica/processi/comportamento
dell’applicazione
VIEW(S) : descrivono, nella piattaforma di
layout/rendering/ux di riferimento, gli elementi
di «pura» interfaccia utente (senza descriverne
il comportamento, ma solo l’aspetto)
VIEWMODEL(S) : oggetti, idealmente privi di
dipendenze, che veicolano i dati da e verso le
View e implementano, in maniera astratta, il
comportamento di una interfaccia utente
Esempio Notifiche Facebook








Il MODEL espone la funzionalità per
enumerare le notifiche destinate all’utente
loggato, filtrate ed ordinate, sotto forma di
collezione di oggetti «plain»
La VIEW è composta da elementi di layout
specifici della piattaforma (ListView,
TextView, ImageView, LinearLayout, ecc.)
Il VIEWMODEL «parent» contiene il titolo
(«Notifications»), i comandi relativi ai
pulsanti della toolbar e una collezione di
VIEWMODEL «children»
Il VIEWMODEL «child» contiene il
riferimento all’avatar e il nome dell’autore,
il testo della notifica, la categoria e un
riferimento temporale
Esempio Notifiche Facebook







La mappatura tra proprietà della VIEW e
del VIEWMODEL può essere «naturale»
(es. titolo, autore e testo notifica)…
…o meno (es. immagine avatar, icona
categoria)
Una proprietà del VIEWMODEL può
essere «calcolata» (read-only, rivalutata
automaticamente quando cambiano altre
proprietà da cui dipende, es. «età» della
notifica)
Un VIEWMODEL espone anche
«comandi», ossia azioni scatenate da
interazioni utente o eventi «interni»
Un VIEWMODEL solleva eventi se serve
notificare le VIEW collegate, non le
«manipola» direttamente, altrimenti ne
dipenderebbe!
Note





Il pattern MVVM è tanto più efficace quanto più
«naturale» è il modo di legare VIEW a
VIEWMODEL (es. Binding in XAML,
KnockoutJS, AngularJS, AndroidBinding, ecc.)
Il pattern MVVM è il mezzo migliore per
applicare lo Unit Testing anche al layer UI
Nel pattern MVVM la comunicazione tra diversi
VIEWMODEL (ad es. children di una stessa
gerarchia) avviene tipicamente seguendo un
modello di messaging pub/sub, per minimizzare
il mutuo accoppiamento, tramite un «event
aggregator»
DEMO
AndroidBinding (framework di Andy Tsui,
reperibile su GitHub)












Observables
Binding
DependantObservables
CollectionObservables
CollectionObservers
Commands
Eventi (viewmodelview e viewmodelviewmodel)
Unit Testing (con Junit)

Mais conteúdo relacionado

Semelhante a Sviluppo MVVM con Android

MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMarco Amendola
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
Introduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.MicroIntroduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.MicroMassimo Bonanni
 
"Don't call us, we'll call you" - AngularJS meets Event-Driven Architecture
"Don't call us, we'll call you" - AngularJS meets Event-Driven Architecture"Don't call us, we'll call you" - AngularJS meets Event-Driven Architecture
"Don't call us, we'll call you" - AngularJS meets Event-Driven ArchitectureLuca Milan
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
BPM e Cloud: la partnership ideale
BPM e Cloud: la partnership idealeBPM e Cloud: la partnership ideale
BPM e Cloud: la partnership idealeemanuelemolteni
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockoutDotNetCampus
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - PrismDotNetMarche
 
Drupal 4 stakeholder
Drupal 4 stakeholderDrupal 4 stakeholder
Drupal 4 stakeholderbmeme
 
[drupalday2017] - Drupal 4 Stakeholders
[drupalday2017] - Drupal 4 Stakeholders[drupalday2017] - Drupal 4 Stakeholders
[drupalday2017] - Drupal 4 StakeholdersDrupalDay
 
DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)Alessandro Giorgetti
 
EXELEARNING COME EDITOR DI CONTENUTI PER MOODLE
EXELEARNING COME EDITOR DI CONTENUTI PER MOODLEEXELEARNING COME EDITOR DI CONTENUTI PER MOODLE
EXELEARNING COME EDITOR DI CONTENUTI PER MOODLEWebinarPro srl
 
Corso WebApp iOS - Lezione 04: iOS UI Design
Corso WebApp iOS - Lezione 04: iOS UI DesignCorso WebApp iOS - Lezione 04: iOS UI Design
Corso WebApp iOS - Lezione 04: iOS UI DesignAndrea Picchi
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
Criteri Di Riusabilita’ Di Un Learning Object
Criteri Di Riusabilita’ Di Un Learning ObjectCriteri Di Riusabilita’ Di Un Learning Object
Criteri Di Riusabilita’ Di Un Learning ObjectMarianna Amidei
 

Semelhante a Sviluppo MVVM con Android (20)

MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.Micro
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
Introduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.MicroIntroduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.Micro
 
"Don't call us, we'll call you" - AngularJS meets Event-Driven Architecture
"Don't call us, we'll call you" - AngularJS meets Event-Driven Architecture"Don't call us, we'll call you" - AngularJS meets Event-Driven Architecture
"Don't call us, we'll call you" - AngularJS meets Event-Driven Architecture
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
BPM e Cloud: la partnership ideale
BPM e Cloud: la partnership idealeBPM e Cloud: la partnership ideale
BPM e Cloud: la partnership ideale
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
 
Drupal 4 stakeholder
Drupal 4 stakeholderDrupal 4 stakeholder
Drupal 4 stakeholder
 
Lezione 01/2006
Lezione 01/2006Lezione 01/2006
Lezione 01/2006
 
[drupalday2017] - Drupal 4 Stakeholders
[drupalday2017] - Drupal 4 Stakeholders[drupalday2017] - Drupal 4 Stakeholders
[drupalday2017] - Drupal 4 Stakeholders
 
DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)
 
EXELEARNING COME EDITOR DI CONTENUTI PER MOODLE
EXELEARNING COME EDITOR DI CONTENUTI PER MOODLEEXELEARNING COME EDITOR DI CONTENUTI PER MOODLE
EXELEARNING COME EDITOR DI CONTENUTI PER MOODLE
 
Corso WebApp iOS - Lezione 04: iOS UI Design
Corso WebApp iOS - Lezione 04: iOS UI DesignCorso WebApp iOS - Lezione 04: iOS UI Design
Corso WebApp iOS - Lezione 04: iOS UI Design
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
Bpm forum 2013 web ratio - BPMN e IFML
Bpm forum 2013   web ratio - BPMN e IFMLBpm forum 2013   web ratio - BPMN e IFML
Bpm forum 2013 web ratio - BPMN e IFML
 
Criteri Di Riusabilita’ Di Un Learning Object
Criteri Di Riusabilita’ Di Un Learning ObjectCriteri Di Riusabilita’ Di Un Learning Object
Criteri Di Riusabilita’ Di Un Learning Object
 
Web dynpro for abap 03
Web dynpro for abap 03Web dynpro for abap 03
Web dynpro for abap 03
 

Sviluppo MVVM con Android

  • 1. Sviluppare con MVVM in Android Lorenzo Maiorfi Innovactive Engineering
  • 2. Pattern MVVM     É uno dei design pattern relativi all’area «presentation/ui» Introdotto da Microsoft come specializzazione del Presentation Model di Martin Fowler Deriva dal pattern MVC, dal quale eredita il principale obiettivo di… …ottenere una netta separazione delle responsabilità tra i diversi moduli coinvolti nella gestione della UI di un’applicazione
  • 3. Componenti    MODEL : è costituito dall’insieme dei moduli che contribuiscono ad implementare la logica/processi/comportamento dell’applicazione VIEW(S) : descrivono, nella piattaforma di layout/rendering/ux di riferimento, gli elementi di «pura» interfaccia utente (senza descriverne il comportamento, ma solo l’aspetto) VIEWMODEL(S) : oggetti, idealmente privi di dipendenze, che veicolano i dati da e verso le View e implementano, in maniera astratta, il comportamento di una interfaccia utente
  • 4. Esempio Notifiche Facebook     Il MODEL espone la funzionalità per enumerare le notifiche destinate all’utente loggato, filtrate ed ordinate, sotto forma di collezione di oggetti «plain» La VIEW è composta da elementi di layout specifici della piattaforma (ListView, TextView, ImageView, LinearLayout, ecc.) Il VIEWMODEL «parent» contiene il titolo («Notifications»), i comandi relativi ai pulsanti della toolbar e una collezione di VIEWMODEL «children» Il VIEWMODEL «child» contiene il riferimento all’avatar e il nome dell’autore, il testo della notifica, la categoria e un riferimento temporale
  • 5. Esempio Notifiche Facebook      La mappatura tra proprietà della VIEW e del VIEWMODEL può essere «naturale» (es. titolo, autore e testo notifica)… …o meno (es. immagine avatar, icona categoria) Una proprietà del VIEWMODEL può essere «calcolata» (read-only, rivalutata automaticamente quando cambiano altre proprietà da cui dipende, es. «età» della notifica) Un VIEWMODEL espone anche «comandi», ossia azioni scatenate da interazioni utente o eventi «interni» Un VIEWMODEL solleva eventi se serve notificare le VIEW collegate, non le «manipola» direttamente, altrimenti ne dipenderebbe!
  • 6. Note    Il pattern MVVM è tanto più efficace quanto più «naturale» è il modo di legare VIEW a VIEWMODEL (es. Binding in XAML, KnockoutJS, AngularJS, AndroidBinding, ecc.) Il pattern MVVM è il mezzo migliore per applicare lo Unit Testing anche al layer UI Nel pattern MVVM la comunicazione tra diversi VIEWMODEL (ad es. children di una stessa gerarchia) avviene tipicamente seguendo un modello di messaging pub/sub, per minimizzare il mutuo accoppiamento, tramite un «event aggregator»
  • 7. DEMO AndroidBinding (framework di Andy Tsui, reperibile su GitHub)          Observables Binding DependantObservables CollectionObservables CollectionObservers Commands Eventi (viewmodelview e viewmodelviewmodel) Unit Testing (con Junit)