SlideShare a Scribd company logo
3.c.6 Pattern MVVM
Per fornire alla piattaforma SUE-Agile una adeguata struttura ed organanizzazione di componenti si è scelto
di utilizzare il pattern architetturale “Model View View-Model”.
Esso consiste nella separazione degli aspetti dell’applicazione in tre componenti:
• Model
• View
• ViewModel
Come si deduce facilmente dalla figura precedente il Model rappresenta il punto di accesso ai dati. Trattasi di
una o più classi che leggono dati dal DB, oppure da un servizio Web di qualsivoglia natura.
La View rappresenta la vista dell’applicazione, l’interfaccia grafica, mentre il ViewModel è il punto di incontro
tra la View e il Model: i dati ricevuti da quest’ultimo sono elaborati per essere presentati e passati alla View e
viceversa.
Il ViewModel (VM) può essere immaginato come un’astrazione della view, ma nello stesso tempo è anche una
specializzazione del model che la view utilizza per il data binding. Il VM è particolarmente utile quando il Model
è complesso, o è già esistente e non si può modificare, oppure quando i tipi di dato del model non sono
facilmente collegabili alla view.
Quando l’utente interagisce con la View, instantaneamente la variazione di stato è comunicata al ViewModel
(grazie al Data-Binding) e come risposta al cambio di stato o all’attivazione di un metodo il ViewModel “agisce”
tramite il Model e aggiorna il proprio stato. Il nuovo stato del ViewModel si riflette poi sulla View.
E’ fondamentale il fatto che il ViewModel mantenga nel proprio stato non solo le informazioni recuperate
attraverso il Model, ma anche lo stato attuale della visualizzazione: ciò gli consente di essere del tutto
disaccoppiato dalla View.
Un modo per visualizzare il concetto è pensare alle applicazioni che fanno uso di tale pattern come composte
da un albero di ViewModel, ciascuno responsabile di una particolare "zona" dell'interfaccia utente, che realizzi
nel suo insieme una sorta di macchina a stati: ogni volta che l'utente sollecita l'applicazione, e quindi
indirettamente la "macchina", quest'ultima reagisce, cambiando il proprio stato ed eseguendo sotto il proprio
controllo le operazioni di dominio business.
In questa visione, la View si riduce ad un "vetro" attraverso il quale l'utente osserva il funzionamento della
"macchina".
Ciò consente di ottenere facilmente la separazione del comportamento dell'applicazione dal suo "Look &
Feel"; questo è estremamente vantaggioso in scenari di sviluppo (ultimamente sempre più diffusi) in cui gli
aspetti di User Experience sono curati da figure con precise competenze, diverse da quelle necessarie per lo
sviluppo e la codifica.
Per facilitare questa separazione, il ViewModel deve essere progettato in termini il più possibile astratti; anche
per questo motivo è preferibile evitare dipendenze dirette alla View stessa, oppure verso componenti specifici
della tecnologia di UI. E' piuttosto comune per le applicazioni moderne fare uso della cosiddetta UI
composition, ovvero della capacità di comporre l'interfaccia utente mediante la creazione dinamica di diversi
parti più piccole, spesso coordinate, collocate all'interno di opportune zone di una "impalcatura" principale,
detta shell. Un classico esempio (probabilmente tra i più complessi) di questa tecnica è la UI di Visual Studio,
composta da una numerosa serie di pannelli, toolbar e finestre di documento, completamente personalizzabile
dall'utente ed estendibile con nuovi componenti forniti mediante plugin.
Oltre all'aspetto puramente "visuale", tuttavia, la UI Composition richiede la presenza di qualche tipo di
infrastruttura che regoli e diriga il ciclo di vita (creazione, inizializzazione, attivazione, disattivazione, rilascio)
delle varie porzioni di schermo.
Il pattern MVVM non prescrive una linea precisa per questi aspetti; le diverse implementazioni, comunque,
sono suddivise in due gruppi principali:
 View-First: il processo di composizione è guidato e sollecitato dalla View; quest'ultima, cioè, stabilisce
quali parti debbano essere composte e in quale zona della shell siano visualizzate. Questa
impostazione richiede che i ViewModel associati a ciascuna parte della View siano istanziati e collegati
in fase successiva;
 Model-First: la composizione è gestita istanziando prima di tutto il ViewModel e collegando
successivamente la View corrispondente. In questa impostazione, che ritengo più naturale ed in linea
con la filosofia del MVVM, la composizione avviene prima di tutto a livello del ViewModel, mediante la
creazione (anche dinamica) di un "albero" delle varie parti; alla View è lasciato il compito di
rappresentare questo albero e le sue variazioni utilizzando gli usuali meccanismi di binding e
templating.
Come anticipato nei paragrafi precedenti Il SUE-Agile è stato sviluppato all’interno di un ambiente di tipo
.NET.Si è quindi fatto uso del linguaggio C# nella parte che si interfaccia con il livello dei dati, mentre per la
codifica del View-Model si è deciso di utilizzare lo script-language “Typescript”, le cui principali caratteristiche
sono meglio delineate in un altro paragrafo del documento. Per la View sono state invece sfruttate le
potenzialità e le novità introdotte dal linguaggio di mark-up HTML5. Importante per il collegamento tra questi
ultimi due componenti è stata senza dubbio la libreria KnockoutJs che ha permesso di implementare in
maniera semplice ed ottimale i meccanismi di data-binding.
Uno dei maggiori vantaggi derivanti dall’adozione di tale pattern è senza dubbio la possibilità di modificare
singole parti del codice senza influire sulle altre, garantendo quindi una manutenibilità del migliore dello stesso
e semplificando notevolmente la fase di test.

More Related Content

Viewers also liked (17)

Професия "програмист"
Професия "програмист"Професия "програмист"
Професия "програмист"
Svetlin Nakov
 
Dependency Injection and Inversion Of Control
Dependency Injection and Inversion Of ControlDependency Injection and Inversion Of Control
Dependency Injection and Inversion Of Control
Simone Busoli
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
Mauro Servienti
 
Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Как да станем софтуерни инженери и да стартираме ИТ бизнес?Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Svetlin Nakov
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
DotNetMarche
 
Работа с Естествен Интелект – Личност – Време – 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
 
UI Composition
UI CompositionUI Composition
UI Composition
DotNetMarche
 
Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015
Svetlin Nakov
 
Introduzione WPF
Introduzione WPFIntroduzione WPF
Introduzione WPF
Ercole Palmeri
 
WPF MVVM Toolkit
WPF MVVM ToolkitWPF MVVM Toolkit
WPF MVVM Toolkit
Alessandro Andreose'
 
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,...
Svetlin Nakov
 
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
Riccardo Cardin
 
Design Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionDesign Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency Injection
Riccardo Cardin
 
Layered Software Architecture
Layered Software ArchitectureLayered Software Architecture
Layered Software Architecture
Lars-Erik Kindblad
 
Професия "програмист"
Професия "програмист"Професия "програмист"
Професия "програмист"
Svetlin Nakov
 
Dependency Injection and Inversion Of Control
Dependency Injection and Inversion Of ControlDependency Injection and Inversion Of Control
Dependency Injection and Inversion Of Control
Simone Busoli
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
Mauro Servienti
 
Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Как да станем софтуерни инженери и да стартираме ИТ бизнес?Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Svetlin Nakov
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
DotNetMarche
 
Работа с Естествен Интелект – Личност – Време – 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
 
Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015
Svetlin Nakov
 
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,...
Svetlin Nakov
 
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
Riccardo Cardin
 
Design Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionDesign Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency Injection
Riccardo Cardin
 

Similar to SUE AGILE MVVM (Italian) (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
codeblock
 
Sviluppo MVVM con Android
Sviluppo MVVM con AndroidSviluppo MVVM con Android
Sviluppo MVVM con Android
Lorenzo Maiorfi
 
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
Andrea Dottor
 
AreaMVC: un'architettura software basata sulla semplicità
AreaMVC: un'architettura software basata sulla semplicitàAreaMVC: un'architettura software basata sulla semplicità
AreaMVC: un'architettura software basata sulla semplicità
Giulio Destri
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
Andrea Saltarello
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
DotNetCampus
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.Micro
Marco Amendola
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
Davide Sito
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
Manuel Scapolan
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
DotNetMarche
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
Sabino Labarile
 
Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Implementazione di una Web App per la verifica dei requisiti progettuali del ...Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Luca Dalle Vedove
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
Manuel Scapolan
 
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
Giorgio Di Nardo
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community Tour
Andrea Balducci
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
firenze-gtug
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
NaLUG
 
Che cosa sono i microservizi?
Che cosa sono i microservizi?Che cosa sono i microservizi?
Che cosa sono i microservizi?
Salvatore Cordiano
 
Progettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time loggingProgettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time logging
Vittoriano Muttillo
 
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
codeblock
 
Sviluppo MVVM con Android
Sviluppo MVVM con AndroidSviluppo MVVM con Android
Sviluppo MVVM con Android
Lorenzo Maiorfi
 
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
Andrea Dottor
 
AreaMVC: un'architettura software basata sulla semplicità
AreaMVC: un'architettura software basata sulla semplicitàAreaMVC: un'architettura software basata sulla semplicità
AreaMVC: un'architettura software basata sulla semplicità
Giulio Destri
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
Andrea Saltarello
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
DotNetCampus
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.Micro
Marco Amendola
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
Davide Sito
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
DotNetMarche
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
Sabino Labarile
 
Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Implementazione di una Web App per la verifica dei requisiti progettuali del ...Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Luca Dalle Vedove
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
Manuel Scapolan
 
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
Giorgio Di Nardo
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community Tour
Andrea Balducci
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
firenze-gtug
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
NaLUG
 
Progettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time loggingProgettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time logging
Vittoriano Muttillo
 

More from Sabino Labarile (20)

SUE AGILE - Presentazione della piattaforma
SUE AGILE - Presentazione della piattaforma SUE AGILE - Presentazione della piattaforma
SUE AGILE - Presentazione della piattaforma
Sabino Labarile
 
Manuale utente SUE AGILE
Manuale utente SUE AGILEManuale utente SUE AGILE
Manuale utente SUE AGILE
Sabino Labarile
 
SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)
Sabino Labarile
 
SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)
Sabino Labarile
 
SUE AGILE MVVM (English)
SUE AGILE MVVM (English)SUE AGILE MVVM (English)
SUE AGILE MVVM (English)
Sabino Labarile
 
SUE AGILE Framework (English)
SUE AGILE Framework (English)SUE AGILE Framework (English)
SUE AGILE Framework (English)
Sabino Labarile
 
SUE AGILE Architecture (English)
SUE AGILE Architecture (English)SUE AGILE Architecture (English)
SUE AGILE Architecture (English)
Sabino Labarile
 
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMASUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
Sabino Labarile
 
e-suap - client technologies- english version
e-suap - client technologies- english versione-suap - client technologies- english version
e-suap - client technologies- english version
Sabino Labarile
 
e-suap cloud computing- English version
e-suap cloud computing- English versione-suap cloud computing- English version
e-suap cloud computing- English version
Sabino Labarile
 
e-SUAP - Ochestration building block (italian)
e-SUAP - Ochestration building block (italian)e-SUAP - Ochestration building block (italian)
e-SUAP - Ochestration building block (italian)
Sabino Labarile
 
e-SUAP - Ochestration building block (english)
e-SUAP - Ochestration building block (english)e-SUAP - Ochestration building block (english)
e-SUAP - Ochestration building block (english)
Sabino Labarile
 
e-SUAP - Security - Windows azure access control list (english version)
e-SUAP - Security - Windows azure access control list (english version)e-SUAP - Security - Windows azure access control list (english version)
e-SUAP - Security - Windows azure access control list (english version)
Sabino Labarile
 
e-SUAP - Security - Windows azure access control list (italian version)
e-SUAP - Security - Windows azure access control list (italian version)e-SUAP - Security - Windows azure access control list (italian version)
e-SUAP - Security - Windows azure access control list (italian version)
Sabino Labarile
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
Sabino Labarile
 
e-SUAP - Data access server side (English)
e-SUAP - Data access server side (English)e-SUAP - Data access server side (English)
e-SUAP - Data access server side (English)
Sabino Labarile
 
e-suap - general software architecture (English)
e-suap - general software architecture (English)e-suap - general software architecture (English)
e-suap - general software architecture (English)
Sabino Labarile
 
e-SUAP - General software architecture (English)
e-SUAP - General software architecture  (English)e-SUAP - General software architecture  (English)
e-SUAP - General software architecture (English)
Sabino Labarile
 
E suap - cloud computing (Italian)
E suap - cloud computing (Italian)E suap - cloud computing (Italian)
E suap - cloud computing (Italian)
Sabino Labarile
 
e-Suap Inista 2014 (International Symposium on INnovation in Intelligent SysT...
e-Suap Inista 2014 (International Symposium on INnovation in Intelligent SysT...e-Suap Inista 2014 (International Symposium on INnovation in Intelligent SysT...
e-Suap Inista 2014 (International Symposium on INnovation in Intelligent SysT...
Sabino Labarile
 
SUE AGILE - Presentazione della piattaforma
SUE AGILE - Presentazione della piattaforma SUE AGILE - Presentazione della piattaforma
SUE AGILE - Presentazione della piattaforma
Sabino Labarile
 
Manuale utente SUE AGILE
Manuale utente SUE AGILEManuale utente SUE AGILE
Manuale utente SUE AGILE
Sabino Labarile
 
SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)
Sabino Labarile
 
SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)
Sabino Labarile
 
SUE AGILE MVVM (English)
SUE AGILE MVVM (English)SUE AGILE MVVM (English)
SUE AGILE MVVM (English)
Sabino Labarile
 
SUE AGILE Framework (English)
SUE AGILE Framework (English)SUE AGILE Framework (English)
SUE AGILE Framework (English)
Sabino Labarile
 
SUE AGILE Architecture (English)
SUE AGILE Architecture (English)SUE AGILE Architecture (English)
SUE AGILE Architecture (English)
Sabino Labarile
 
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMASUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
Sabino Labarile
 
e-suap - client technologies- english version
e-suap - client technologies- english versione-suap - client technologies- english version
e-suap - client technologies- english version
Sabino Labarile
 
e-suap cloud computing- English version
e-suap cloud computing- English versione-suap cloud computing- English version
e-suap cloud computing- English version
Sabino Labarile
 
e-SUAP - Ochestration building block (italian)
e-SUAP - Ochestration building block (italian)e-SUAP - Ochestration building block (italian)
e-SUAP - Ochestration building block (italian)
Sabino Labarile
 
e-SUAP - Ochestration building block (english)
e-SUAP - Ochestration building block (english)e-SUAP - Ochestration building block (english)
e-SUAP - Ochestration building block (english)
Sabino Labarile
 
e-SUAP - Security - Windows azure access control list (english version)
e-SUAP - Security - Windows azure access control list (english version)e-SUAP - Security - Windows azure access control list (english version)
e-SUAP - Security - Windows azure access control list (english version)
Sabino Labarile
 
e-SUAP - Security - Windows azure access control list (italian version)
e-SUAP - Security - Windows azure access control list (italian version)e-SUAP - Security - Windows azure access control list (italian version)
e-SUAP - Security - Windows azure access control list (italian version)
Sabino Labarile
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
Sabino Labarile
 
e-SUAP - Data access server side (English)
e-SUAP - Data access server side (English)e-SUAP - Data access server side (English)
e-SUAP - Data access server side (English)
Sabino Labarile
 
e-suap - general software architecture (English)
e-suap - general software architecture (English)e-suap - general software architecture (English)
e-suap - general software architecture (English)
Sabino Labarile
 
e-SUAP - General software architecture (English)
e-SUAP - General software architecture  (English)e-SUAP - General software architecture  (English)
e-SUAP - General software architecture (English)
Sabino Labarile
 
E suap - cloud computing (Italian)
E suap - cloud computing (Italian)E suap - cloud computing (Italian)
E suap - cloud computing (Italian)
Sabino Labarile
 
e-Suap Inista 2014 (International Symposium on INnovation in Intelligent SysT...
e-Suap Inista 2014 (International Symposium on INnovation in Intelligent SysT...e-Suap Inista 2014 (International Symposium on INnovation in Intelligent SysT...
e-Suap Inista 2014 (International Symposium on INnovation in Intelligent SysT...
Sabino Labarile
 

SUE AGILE MVVM (Italian)

  • 1. 3.c.6 Pattern MVVM Per fornire alla piattaforma SUE-Agile una adeguata struttura ed organanizzazione di componenti si è scelto di utilizzare il pattern architetturale “Model View View-Model”. Esso consiste nella separazione degli aspetti dell’applicazione in tre componenti: • Model • View • ViewModel Come si deduce facilmente dalla figura precedente il Model rappresenta il punto di accesso ai dati. Trattasi di una o più classi che leggono dati dal DB, oppure da un servizio Web di qualsivoglia natura. La View rappresenta la vista dell’applicazione, l’interfaccia grafica, mentre il ViewModel è il punto di incontro tra la View e il Model: i dati ricevuti da quest’ultimo sono elaborati per essere presentati e passati alla View e viceversa. Il ViewModel (VM) può essere immaginato come un’astrazione della view, ma nello stesso tempo è anche una specializzazione del model che la view utilizza per il data binding. Il VM è particolarmente utile quando il Model è complesso, o è già esistente e non si può modificare, oppure quando i tipi di dato del model non sono facilmente collegabili alla view. Quando l’utente interagisce con la View, instantaneamente la variazione di stato è comunicata al ViewModel (grazie al Data-Binding) e come risposta al cambio di stato o all’attivazione di un metodo il ViewModel “agisce” tramite il Model e aggiorna il proprio stato. Il nuovo stato del ViewModel si riflette poi sulla View. E’ fondamentale il fatto che il ViewModel mantenga nel proprio stato non solo le informazioni recuperate attraverso il Model, ma anche lo stato attuale della visualizzazione: ciò gli consente di essere del tutto disaccoppiato dalla View. Un modo per visualizzare il concetto è pensare alle applicazioni che fanno uso di tale pattern come composte da un albero di ViewModel, ciascuno responsabile di una particolare "zona" dell'interfaccia utente, che realizzi nel suo insieme una sorta di macchina a stati: ogni volta che l'utente sollecita l'applicazione, e quindi
  • 2. indirettamente la "macchina", quest'ultima reagisce, cambiando il proprio stato ed eseguendo sotto il proprio controllo le operazioni di dominio business. In questa visione, la View si riduce ad un "vetro" attraverso il quale l'utente osserva il funzionamento della "macchina". Ciò consente di ottenere facilmente la separazione del comportamento dell'applicazione dal suo "Look & Feel"; questo è estremamente vantaggioso in scenari di sviluppo (ultimamente sempre più diffusi) in cui gli aspetti di User Experience sono curati da figure con precise competenze, diverse da quelle necessarie per lo sviluppo e la codifica. Per facilitare questa separazione, il ViewModel deve essere progettato in termini il più possibile astratti; anche per questo motivo è preferibile evitare dipendenze dirette alla View stessa, oppure verso componenti specifici della tecnologia di UI. E' piuttosto comune per le applicazioni moderne fare uso della cosiddetta UI composition, ovvero della capacità di comporre l'interfaccia utente mediante la creazione dinamica di diversi parti più piccole, spesso coordinate, collocate all'interno di opportune zone di una "impalcatura" principale, detta shell. Un classico esempio (probabilmente tra i più complessi) di questa tecnica è la UI di Visual Studio, composta da una numerosa serie di pannelli, toolbar e finestre di documento, completamente personalizzabile dall'utente ed estendibile con nuovi componenti forniti mediante plugin. Oltre all'aspetto puramente "visuale", tuttavia, la UI Composition richiede la presenza di qualche tipo di infrastruttura che regoli e diriga il ciclo di vita (creazione, inizializzazione, attivazione, disattivazione, rilascio) delle varie porzioni di schermo. Il pattern MVVM non prescrive una linea precisa per questi aspetti; le diverse implementazioni, comunque, sono suddivise in due gruppi principali:  View-First: il processo di composizione è guidato e sollecitato dalla View; quest'ultima, cioè, stabilisce quali parti debbano essere composte e in quale zona della shell siano visualizzate. Questa impostazione richiede che i ViewModel associati a ciascuna parte della View siano istanziati e collegati in fase successiva;  Model-First: la composizione è gestita istanziando prima di tutto il ViewModel e collegando successivamente la View corrispondente. In questa impostazione, che ritengo più naturale ed in linea con la filosofia del MVVM, la composizione avviene prima di tutto a livello del ViewModel, mediante la creazione (anche dinamica) di un "albero" delle varie parti; alla View è lasciato il compito di rappresentare questo albero e le sue variazioni utilizzando gli usuali meccanismi di binding e templating. Come anticipato nei paragrafi precedenti Il SUE-Agile è stato sviluppato all’interno di un ambiente di tipo .NET.Si è quindi fatto uso del linguaggio C# nella parte che si interfaccia con il livello dei dati, mentre per la codifica del View-Model si è deciso di utilizzare lo script-language “Typescript”, le cui principali caratteristiche sono meglio delineate in un altro paragrafo del documento. Per la View sono state invece sfruttate le potenzialità e le novità introdotte dal linguaggio di mark-up HTML5. Importante per il collegamento tra questi ultimi due componenti è stata senza dubbio la libreria KnockoutJs che ha permesso di implementare in maniera semplice ed ottimale i meccanismi di data-binding.
  • 3. Uno dei maggiori vantaggi derivanti dall’adozione di tale pattern è senza dubbio la possibilità di modificare singole parti del codice senza influire sulle altre, garantendo quindi una manutenibilità del migliore dello stesso e semplificando notevolmente la fase di test.