SlideShare une entreprise Scribd logo
1  sur  28
Template designed by
Rich client application:
MVC4 + MVVM = Knockout.js
Giorgio Di Nardo
giorgio.dinardo@domusdotnet.org
http://blogs.ugidotnet.org/akelitz/
@akelitz
brought to you by
GIORGIO DI NARDO
 Lavoro presso Proge-software come Senior Consultant
 Sono tra i fondatori di DomusDotNet
 Sono Microsoft Certified Trainer
chi sono
 MVC4 + MVVM = Knockout.js: cioè?
 Knockout.js: quando, perché e come
 datemi un punto d'appoggio e solleverò il mondo:
estendere KO
 unit testing lato-client? si può!
 tutto qui!?
agenda agile
 MVC4 + MVVM = Knockout.js: cioè?
 Knockout.js: quando, perché e come
 datemi un punto d'appoggio e solleverò il mondo:
estendere KO
 unit testing lato-client? si può!
 tutto qui!?
agenda agile
 Pattern architetturale
 Model = dati
 View = interfaccia
 Controller = interazione
 Separation-of-Concerns
 Dependency Injection
 Convention-over-
Configuration
MVC4 = Model View Controller “in salsa” Model2
Client
Utente
(browser)
Server
Controller
View
Model
 Pattern di presentation
della famiglia MV*
 Separation-of-Concerns
 Rompere il legame forte
tra i dati (Model) e la loro
rappresentazione (View)
per mezzo di un terzo
soggetto (ViewModel)
MVVM = Model-View-ViewModel
 Si definiscono e si idratano
i dati (Model) da
visualizzare
 Si veicolano i dati
attraverso il ViewModel
verso la View utilizzando un
meccanismo di data-bind
che permetta la gestione
bidirezionale degli
aggiornamenti dei dati stessi
 Si definiscono delle
operazioni nel ViewModel
per gestire gli eventi
 Model: i dati gestiti dall’applicazione rappresentati sotto
forma di oggetto o array Javascript
 View: la pagina HTML contenente i vari elementi di
markup
 ViewModel: un oggetto Javascript che espone i dati
(Model) in un formato «comodo» per l’interfaccia (View) e
contiene le operazioni per rispondere agli eventi da questa
generati
MVVM in HTML
 Libreria in Javascript puro per semplificare la creazione in
HTML di applicazioni basate su MVVM
 Caratteristiche principali:
 Binding dichiarativo dei dati nel markup HTML
 Gestione delle dipendenze con aggiornamento automatico nelle due direzioni
 Facilità di estensione delle funzionalità di base
 Compatibile con la maggior parte dei browser (IE 6+, Firefox
2+, Chrome, …)
 Non sostituisce ma si integra con jQuery
Knockout.js: cosa è?
 MVC4 + MVVM = Knockout.js: cioè?
 Knockout.js: quando, perché e come
 datemi un punto d'appoggio e solleverò il mondo:
estendere KO
 unit testing lato-client? si può!
 tutto qui!?
agenda agile
 In tutti i casi in cui l’interazione del sistema con l’utente
non sia banale e richieda la definizione di una logica di UI
strutturata…
 … in particolare nelle Rich Internet Application (RIA)
Knockout.js: quando usarlo?
 Aiuta ad aumentare la SoC del progetto anche nella parte
storicamente più propensa allo «spaghetti code»
 Consente di gestire in maniera più strutturata e
manutenibile gli elementi e gli eventi del DOM
 Semplifica enormemente i problemi di Unit testing della
parte client della nostra applicazione
….
Knockout.js: perchè usarlo?
 Si creano gli oggetti ViewModel e si definiscono al loro
interno le proprietà observable contenenti i dati da
mostrare e le funzioni associate ai comandi scatenabili
dalla View
 Si aggiungono gli attributi data-bind al markup della
pagina HTML
 Si attiva il binding con una chiamata al metodo
ko.applyBinding
Knockout.js: come usarlo?
demo
Hello World
 MVC4 + MVVM = Knockout.js: cioè?
 Knockout.js: quando, perché e come
 datemi un punto d'appoggio e solleverò il mondo:
estendere KO
 unit testing lato-client? si può!
 tutto qui!?
agenda agile
 Knockout garantisce out-of-the-box le funzioni per leggere
e scrivere e per notificare le variazioni ai
subscriber, però…
 … e possibile estendere il meccanismo degli observable
in maniera semplice scrivendo poco righe di codice…
 … oppure sfruttare i plugin e gli extender disponibili ad
esempio su NuGet
Estendere Knockout.js
demo
Hello World
 MVC4 + MVVM = Knockout.js: cioè?
 Knockout.js: quando, perché e come
 datemi un punto d'appoggio e solleverò il mondo:
estendere KO
 unit testing lato-client? si può!
 tutto qui!?
agenda agile
 Parte dello sviluppo software che si occupa della verifica
delle corrispondenza tra il funzionamento del codice e i
requisiti
 Target (unit, integration, system) e Scope
(functional, performance, scalability, acceptant, …)
 Consente di migliorare la qualità del proprio
codice, ridurre il peso della manutenzione ma anche
(TDD) migliorarne il design
Testing, Unit testing e TDD
 Testare piccoli frammenti di codice («unit»), tipicamente
metodi
 Testare i soli endpoint pubblici
 Testare in maniera isolata rispetto al resto
dell’applicazione
 Ottenere il risultato positivo/negativo dei test in maniera
automatizzata
Pilastri dello Unit testing
 Utilizzare lo Unit testing per guidare lo sviluppo della
propria applicazione
 Scrivere il codice strettamente necessario a passare i test
 Red/Green cycle
 Utilizzabile sia per i nuovi sviluppi che per il bug fixing
 Attenzione al refactoring!
Test Driven Development
 Arrange: predisporre l’ambiente per il test
 Act: effettuare la chiamata al codice oggetto del test
 Assert: verificare che ciò che ci si aspettava si è verificato
(e ciò che non ci si aspettava non si è verificato)
 Verificare un comportamento alla volta (single assertion
rule)
Arrange, Act, Assert
 Framework di test della famiglia jQuery
 Sintassi di Asserting semplice ed immediata
 Interfaccia chiara
 Possibilità di dividere i test in moduli
 Possibilità di preparare e ripulire l’ambiente di test in
maniera centralizzata
qUnit
demo
Hello World
 MVC4 + MVVM = Knockout.js: cioè?
 Knockout.js: quando, perché e come
 datemi un punto d'appoggio e solleverò il mondo:
estendere KO
 unit testing lato-client? si può!
 tutto qui!?
agenda agile
 Fornito di un motore di templating del markup HTML
 Corredato da Plugin (mapping, …) ed Extender
(validation, ...)
 Disegnato per integrarsi al meglio con altri framework
Javascript: Durandal.js, Require.js, ...
 Pilastro per costruzione delle Single Page Application
No! Knockout.js è anche…
brought to you by
Grazie a tutti per la partecipazione
Riceverete il link per il download a slide e demo via email nei
prossimi giorni
Per contattarmi
giorgio.dinardo@domusdotnet.org
Grazie

Contenu connexe

Tendances

Alessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Eugenio Minardi
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailStefano Ottaviani
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
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.jsAndrea Dottor
 
Utilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperUtilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperStefano Ottaviani
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMarco Amendola
 
Java Conference 2006 Dessi Massimiliano
Java Conference 2006 Dessi MassimilianoJava Conference 2006 Dessi Massimiliano
Java Conference 2006 Dessi MassimilianoMassimiliano Dessì
 
Generazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETGenerazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETStefano Ottaviani
 
Data binding libera tutti!
Data binding libera tutti!Data binding libera tutti!
Data binding libera tutti!Salvatore Laisa
 
MEAN: il nuovo stack di sviluppo per il futuro del web
MEAN: il nuovo stack di sviluppo per il futuro del webMEAN: il nuovo stack di sviluppo per il futuro del web
MEAN: il nuovo stack di sviluppo per il futuro del webEugenio Minardi
 
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
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue jsGianfranco Castro
 
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis WebSpring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis WebMassimiliano Dessì
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsMarcello Teodori
 

Tendances (18)

Alessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS
 
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
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
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
 
Utilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperUtilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software Developer
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.Micro
 
MVC and Struts 1
MVC and Struts 1MVC and Struts 1
MVC and Struts 1
 
Java Conference 2006 Dessi Massimiliano
Java Conference 2006 Dessi MassimilianoJava Conference 2006 Dessi Massimiliano
Java Conference 2006 Dessi Massimiliano
 
Generazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETGenerazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NET
 
Data binding libera tutti!
Data binding libera tutti!Data binding libera tutti!
Data binding libera tutti!
 
MEAN: il nuovo stack di sviluppo per il futuro del web
MEAN: il nuovo stack di sviluppo per il futuro del webMEAN: il nuovo stack di sviluppo per il futuro del web
MEAN: il nuovo stack di sviluppo per il futuro del web
 
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
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue js
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis WebSpring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 

En vedette

Da imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JSDa imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JSRoberto Messora
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page ApplicationsRoberto Messora
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webRoberto Messora
 
Real world Visual Studio Code
Real world Visual Studio CodeReal world Visual Studio Code
Real world Visual Studio CodeRoberto Messora
 

En vedette (7)

Usare Knockout JS
Usare Knockout JSUsare Knockout JS
Usare Knockout JS
 
Da imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JSDa imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JS
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page Applications
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
 
Javascript Unit Testing
Javascript Unit TestingJavascript Unit Testing
Javascript Unit Testing
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
Real world Visual Studio Code
Real world Visual Studio CodeReal world Visual Studio Code
Real world Visual Studio Code
 

Similaire à Rich client application: MVC4 + MVVM = Knockout.js

Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockoutDotNetCampus
 
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 TourAndrea Balducci
 
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Mattia Milleri
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Mauro Servienti
 
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 2011Gian Maria Ricci
 
Virtualizzazione, cluster, J2EE: best practices tutte da rivedere?
Virtualizzazione, cluster, J2EE: best practices tutte da rivedere?Virtualizzazione, cluster, J2EE: best practices tutte da rivedere?
Virtualizzazione, cluster, J2EE: best practices tutte da rivedere?fcrippa
 
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 miniserviziLuca Acquaviva
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the WebClaudio Gandelli
 
PASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous IntegrationPASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous IntegrationAlessandro Alpi
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Codemotion
 
Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)brossi676
 
Continuous Integration con Visual Studio Online
Continuous Integration con Visual Studio OnlineContinuous Integration con Visual Studio Online
Continuous Integration con Visual Studio OnlineDavide Benvegnù
 
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetesblexin
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDaniele Mondello
 
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
 

Similaire à Rich client application: MVC4 + MVVM = Knockout.js (20)

Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
 
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
 
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010
 
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
 
Virtualizzazione, cluster, J2EE: best practices tutte da rivedere?
Virtualizzazione, cluster, J2EE: best practices tutte da rivedere?Virtualizzazione, cluster, J2EE: best practices tutte da rivedere?
Virtualizzazione, cluster, J2EE: best practices tutte da rivedere?
 
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
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
PASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous IntegrationPASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous Integration
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
 
Owasp parte1-rel1.1
Owasp parte1-rel1.1Owasp parte1-rel1.1
Owasp parte1-rel1.1
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
 
Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)
 
Continuous Integration con Visual Studio Online
Continuous Integration con Visual Studio OnlineContinuous Integration con Visual Studio Online
Continuous Integration con Visual Studio Online
 
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
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
 
Che cosa sono i microservizi?
Che cosa sono i microservizi?Che cosa sono i microservizi?
Che cosa sono i microservizi?
 

Rich client application: MVC4 + MVVM = Knockout.js

  • 1. Template designed by Rich client application: MVC4 + MVVM = Knockout.js Giorgio Di Nardo giorgio.dinardo@domusdotnet.org http://blogs.ugidotnet.org/akelitz/ @akelitz
  • 3. GIORGIO DI NARDO  Lavoro presso Proge-software come Senior Consultant  Sono tra i fondatori di DomusDotNet  Sono Microsoft Certified Trainer chi sono
  • 4.  MVC4 + MVVM = Knockout.js: cioè?  Knockout.js: quando, perché e come  datemi un punto d'appoggio e solleverò il mondo: estendere KO  unit testing lato-client? si può!  tutto qui!? agenda agile
  • 5.  MVC4 + MVVM = Knockout.js: cioè?  Knockout.js: quando, perché e come  datemi un punto d'appoggio e solleverò il mondo: estendere KO  unit testing lato-client? si può!  tutto qui!? agenda agile
  • 6.  Pattern architetturale  Model = dati  View = interfaccia  Controller = interazione  Separation-of-Concerns  Dependency Injection  Convention-over- Configuration MVC4 = Model View Controller “in salsa” Model2 Client Utente (browser) Server Controller View Model
  • 7.  Pattern di presentation della famiglia MV*  Separation-of-Concerns  Rompere il legame forte tra i dati (Model) e la loro rappresentazione (View) per mezzo di un terzo soggetto (ViewModel) MVVM = Model-View-ViewModel  Si definiscono e si idratano i dati (Model) da visualizzare  Si veicolano i dati attraverso il ViewModel verso la View utilizzando un meccanismo di data-bind che permetta la gestione bidirezionale degli aggiornamenti dei dati stessi  Si definiscono delle operazioni nel ViewModel per gestire gli eventi
  • 8.  Model: i dati gestiti dall’applicazione rappresentati sotto forma di oggetto o array Javascript  View: la pagina HTML contenente i vari elementi di markup  ViewModel: un oggetto Javascript che espone i dati (Model) in un formato «comodo» per l’interfaccia (View) e contiene le operazioni per rispondere agli eventi da questa generati MVVM in HTML
  • 9.  Libreria in Javascript puro per semplificare la creazione in HTML di applicazioni basate su MVVM  Caratteristiche principali:  Binding dichiarativo dei dati nel markup HTML  Gestione delle dipendenze con aggiornamento automatico nelle due direzioni  Facilità di estensione delle funzionalità di base  Compatibile con la maggior parte dei browser (IE 6+, Firefox 2+, Chrome, …)  Non sostituisce ma si integra con jQuery Knockout.js: cosa è?
  • 10.  MVC4 + MVVM = Knockout.js: cioè?  Knockout.js: quando, perché e come  datemi un punto d'appoggio e solleverò il mondo: estendere KO  unit testing lato-client? si può!  tutto qui!? agenda agile
  • 11.  In tutti i casi in cui l’interazione del sistema con l’utente non sia banale e richieda la definizione di una logica di UI strutturata…  … in particolare nelle Rich Internet Application (RIA) Knockout.js: quando usarlo?
  • 12.  Aiuta ad aumentare la SoC del progetto anche nella parte storicamente più propensa allo «spaghetti code»  Consente di gestire in maniera più strutturata e manutenibile gli elementi e gli eventi del DOM  Semplifica enormemente i problemi di Unit testing della parte client della nostra applicazione …. Knockout.js: perchè usarlo?
  • 13.  Si creano gli oggetti ViewModel e si definiscono al loro interno le proprietà observable contenenti i dati da mostrare e le funzioni associate ai comandi scatenabili dalla View  Si aggiungono gli attributi data-bind al markup della pagina HTML  Si attiva il binding con una chiamata al metodo ko.applyBinding Knockout.js: come usarlo?
  • 15.  MVC4 + MVVM = Knockout.js: cioè?  Knockout.js: quando, perché e come  datemi un punto d'appoggio e solleverò il mondo: estendere KO  unit testing lato-client? si può!  tutto qui!? agenda agile
  • 16.  Knockout garantisce out-of-the-box le funzioni per leggere e scrivere e per notificare le variazioni ai subscriber, però…  … e possibile estendere il meccanismo degli observable in maniera semplice scrivendo poco righe di codice…  … oppure sfruttare i plugin e gli extender disponibili ad esempio su NuGet Estendere Knockout.js
  • 18.  MVC4 + MVVM = Knockout.js: cioè?  Knockout.js: quando, perché e come  datemi un punto d'appoggio e solleverò il mondo: estendere KO  unit testing lato-client? si può!  tutto qui!? agenda agile
  • 19.  Parte dello sviluppo software che si occupa della verifica delle corrispondenza tra il funzionamento del codice e i requisiti  Target (unit, integration, system) e Scope (functional, performance, scalability, acceptant, …)  Consente di migliorare la qualità del proprio codice, ridurre il peso della manutenzione ma anche (TDD) migliorarne il design Testing, Unit testing e TDD
  • 20.  Testare piccoli frammenti di codice («unit»), tipicamente metodi  Testare i soli endpoint pubblici  Testare in maniera isolata rispetto al resto dell’applicazione  Ottenere il risultato positivo/negativo dei test in maniera automatizzata Pilastri dello Unit testing
  • 21.  Utilizzare lo Unit testing per guidare lo sviluppo della propria applicazione  Scrivere il codice strettamente necessario a passare i test  Red/Green cycle  Utilizzabile sia per i nuovi sviluppi che per il bug fixing  Attenzione al refactoring! Test Driven Development
  • 22.  Arrange: predisporre l’ambiente per il test  Act: effettuare la chiamata al codice oggetto del test  Assert: verificare che ciò che ci si aspettava si è verificato (e ciò che non ci si aspettava non si è verificato)  Verificare un comportamento alla volta (single assertion rule) Arrange, Act, Assert
  • 23.  Framework di test della famiglia jQuery  Sintassi di Asserting semplice ed immediata  Interfaccia chiara  Possibilità di dividere i test in moduli  Possibilità di preparare e ripulire l’ambiente di test in maniera centralizzata qUnit
  • 25.  MVC4 + MVVM = Knockout.js: cioè?  Knockout.js: quando, perché e come  datemi un punto d'appoggio e solleverò il mondo: estendere KO  unit testing lato-client? si può!  tutto qui!? agenda agile
  • 26.  Fornito di un motore di templating del markup HTML  Corredato da Plugin (mapping, …) ed Extender (validation, ...)  Disegnato per integrarsi al meglio con altri framework Javascript: Durandal.js, Require.js, ...  Pilastro per costruzione delle Single Page Application No! Knockout.js è anche…
  • 28. Grazie a tutti per la partecipazione Riceverete il link per il download a slide e demo via email nei prossimi giorni Per contattarmi giorgio.dinardo@domusdotnet.org Grazie