SlideShare a Scribd company logo
1 of 28
Andrea Dottor – Microsoft MVP ASP.NET/IIS
Migliora il tuo codice con Knockout.js
 ...permette di scrivere codice
 Disordinato
 Difficile da leggere
 Difficile da mantenere
 ...non tutti ci sanno metter mano
 Capita spesso che lo sviluppatore che ha scritto
"quel" codice sia l'unico a conoscere come
realmente funziona
JavaScript è un linguaggio potente ma...
 Semplificare il codice il più possibile
 Più il codice è semplice e più sviluppatori ci
sanno metter mano
 Scrivere meno codice
 Meno codice si scrive e meno probabilità di errori
(ci dovrebbe essere) 
 Utilizzare una metodologia
 Esistono molti pattern/librerie che semplificano la
scrittura di codice JavaScript
Soluzioni al disordine
 Esistono molti Design Pattern possibili
 MVC
 MVP
 MVVM
 ...
 Dobbiamo/possiamo scegliere tra
quelli che conosciamo
 Se sviluppiamo in WPF o per Windows Phone o
per Windows 8...conosciamo già MVVM
Quali metodologie possiamo adottare?
 Knockou JS
 http://knockoutjs.com/
 BackBone JS
 http://backbonejs.org/
 Ember JS
 http://emberjs.com/
 Angular JS
 http://angularjs.org/
 ...
Quali strumenti possiamo utilizzare?
 Libreria che porta MVVM nel client
 http://knockoutjs.com/
 "Knockout is a JavaScript library that
helps you to create rich, responsive
display and editor user interfaces with a
clean underlying data model. Any time
you have sections of UI that update
dynamically (e.g., changing depending on
the user’s actions or when an external data
source changes), KO can help you
implement it more simply and
maintainably."
Che cos’è Knockout JS
 Free, open source
 MIT license
 Pure JavaScript
 works with any web framework
 Small & lightweight
 40kb minified... reduces to 14kb when using HTTP
compression
 No dependencies
 Supports all mainstream browsers
 IE 6+, Firefox 2+, Chrome, Opera, Safari
(desktop/mobile)
 Fully documentedAPI
 docs, live examples, and interactive tutorials included
Alcune info su knockout
 Model
 I dati forniti dall'applicazione. Una visualizzazione dei
dati indipendente dalla UI.
 Dati esposti tramite servizi, Web API, ...
 View-Model
 Una rappresentazione dei dati strutturata
appositamente per l'UI. Esposizione delle proprietà e
metodi che possono essere utilizzati nella View
 Scritto in JavaScript
 View
 Si occupa di visualizzare le informazioni che il
ViewModel espone, e permette di chiamarne i metodi
 Uso di HTML5
MVVM: Model-View-ViewModel
 Qualsiasi servizio esposto utilizzando
REST è un ottimo model da utilizzare
per knockout
 WCF con WebHttpBinding
 Web API
 JsonResult
 ...
 Qualsiasi informazioni che siano in
grado di arrivare al client
 JSON contenuto in input[type=hidden]
 ...
Model
 E' un oggetto JavaScript che espone
metodi e proprietà
 Deve essere la corretta rappresentazione dei
dati per la View che si intende realizzare
 Non ha nessun legame con le View
 Non viene eseguito nessun $('#id') oppure
document.getElementById('id')
ViewModel
function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");
this.fullName = ko.computed(function() {
return this.firstName() + " " + this.lastName();
}, this);
}
 Definisce una proprietà "Observable"
 Ad ogni cambiamento di valore della
proprietà, la View viene subito
notificata ed aggiornata
 Genera un proxy sulla proprietà che fa si che
Knockout possa aggiornare l'interfaccia, oppure
tutte le proprietà che dipendono da essa
 Si può agganciare una funzione che
venga invocata al cambio di valore
 viewModel.firstName.subscribe(function(newValue) { ...});
 Simile al INotifyPropertyChanged
ko.observable()
 Definisce un array di tipo "Observable"
 Un oggetto observableArray dispone di tutti i metodi
degli array javascript
 pop, push, shift, unshift, reverse, sort, splice, …
 Può essere inizializzato e popolato direttamente nel
costruttore
 Ad ogni aggiunta, rimozione o
cancellazione di un elemento, la View
viene subito notificata del cambiamento
 Paragonabile ad una
ObservableCollection
ko.observableArray()
 Permette di definire proprietà di tipo
calcolato
 Sono anche queste "Observable"
 Al cambiamento di una proprietà da cui questa
dipende, viene ricalcolato il nuovo valore ed
aggiornata la View
ko.computed()
this.fullName = ko.computed(function() {
return this.firstName() + " " + this.lastName();
}, this);
 Si deve fare uso di HTML5
 KO fa uso dell'attributo data-bind per agganciare
proprietà e metodi esposti dal ViewModel
 Uso di template, foreach, with
 Permette di ripetere facilmente porzioni di
codice, usando un binding "innestato"
 L'unico legame con il ViewModel è nel
corretto utilizzo dei nomi di proprietà e
metodi
View
<p>First name: <strong data-bind="text: firstName"></strong></p>
<p>Last name: <strong data-bind="text: lastName"></strong></p>
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<p>Full name: <strong data-bind="text: fullName"></strong></p>
 La magia che unisce View e
ViewModel è racchiusa in una
semplice riga
 Unisce un ViewModel utilizzando l'intera pagina
come View
 E' possibile associare il ViewModel ad
una porzione di pagina
 Permette di indentificare più View all'interno della
stessa pagina HTML
Collegare View e ViewModel
ko.applyBindings(new AppViewModel());
ko.applyBindings(viewModelA, document.getElementById("one"));
ko.applyBindings(viewModelB, document.getElementById("two"));
demo
 Il template di progetto di ASP.NET MVC
4 Single Page Application fa uso di
knockout
 Un valido esempio di SPA
 E' possibile utilizzare JQuery Mobile in
combinazione con KO
 Attenzione, che JQM e KO lavorano entrambi dopo il
caricamento del DOM e lo modificano
 Da knockout spesso di deve richiamare il 'refresh' dei
controlli
 Esistono framework di SPA costruiti su
Knockout
 Pager.js
 Durandal
KO e Single Page Application
Pager.js
 Libreria JavaScript basata su KO e
JQuery che permette la realizzazione
di applicazioni SPA
 http://pagerjs.com/
 Semplice da utilizzare
 Non ha dipendende con framework
CSS
 A differenza di JQuery Mobile, pager.js si occupa
solamente della navigazione tra pagine e non
degli stili di visualizzazione
Pager.js
 Si occupa solo della parte di Single
Page Application
 Spesso si ha bisogno di un "qualcosa" che ci
permetta di visualizzare/nascondere pagine
 Non tutte le app hanno bisogno di
framework complessi come JQuery
Mobile
 JQM forza l'uso ai suoi CSS
 KO e JQM non lavorano sempre in
coordianzione.
 Spesso si deve fare refresh manuali di componenti della
UI
Perchè Pager.js?
demo
Durandal
 Framework per la realizzazione di
applicazioni SPA, che
migliora/estende l'idea di MVVM di
knockout
 http://durandaljs.com/
 Non solo Single Page Application
 Clean MV* Architecture
 JS & HTML Modularity
 Simple App Lifecycle
 Eventing, Modals, Message Boxes, etc.
 Navigation & Screen State Management
 Built on top of jQuery, Knockout & RequireJS
Durandal
 Organizzazione del codice
 View e ViewModel splittati in file separati, e
collegati solamente dal nome
 Facilità nella manutenzione del codice
 Ogni View e ViewModel è realizzato con uno
specifico ruolo
 La complessità è splittata/ridotta
 Meno possibilità di conflitti al commit nel
controllo sorgente
 Implementazione di MVVM migliorata
rispetto al solo Knockout
 Netta separazione tra View e ViewModel
Perchè Durandal?
demo
Migliora il tuo codice
 Librerie JavaScript come Knockout,
Durandal possono essere di aiuto per
organizzare al meglio codice client
 Librerie esterne non fanno miracoli
 Richiedono disciplina e metodo nel loro utilizzo
 L'ordine e la complessità di ciò che si
scrive è nelle mani dello sviluppatore
 L'impegno di scrivere codice migliore deve arrivare
direttamente dallo sviluppatore
 Pensa al principio KISS
 Keep it simple, stupid
 Più mantieni il codice semplice e più facile sarà
leggerlo e manutenerlo
feedback
10
o feedback su:
• http://xedotnet.org/feedback
• Codice: APR02
Email: andrea@dottor.net
Blog: http://blog.dottor.net
Twitter: http://twitter.com/dottor
feedback

More Related Content

What's hot

Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Fabrizio Bernabei
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Corso WebApp iOS - Lezione 06:   Web Development for iOS DevicesCorso WebApp iOS - Lezione 06:   Web Development for iOS Devices
Corso WebApp iOS - Lezione 06: Web Development for iOS DevicesAndrea Picchi
 
CommitUniversity AngularJSAdvanced Andrea Vallotti
CommitUniversity  AngularJSAdvanced Andrea VallottiCommitUniversity  AngularJSAdvanced Andrea Vallotti
CommitUniversity AngularJSAdvanced Andrea VallottiCommit University
 
ModulAngular
ModulAngularModulAngular
ModulAngularextrategy
 
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0XeDotNet
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
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
 
ASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel ModelASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel ModelManuel Scapolan
 
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
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailStefano Ottaviani
 
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediJava Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediGabriele Manfredi
 
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.jsGiorgio Di Nardo
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMarco Amendola
 

What's hot (20)

Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010
 
Workshop angular
Workshop angularWorkshop angular
Workshop angular
 
Corso angular js base
Corso angular js baseCorso angular js base
Corso angular js base
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Corso WebApp iOS - Lezione 06:   Web Development for iOS DevicesCorso WebApp iOS - Lezione 06:   Web Development for iOS Devices
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
 
CommitUniversity AngularJSAdvanced Andrea Vallotti
CommitUniversity  AngularJSAdvanced Andrea VallottiCommitUniversity  AngularJSAdvanced Andrea Vallotti
CommitUniversity AngularJSAdvanced Andrea Vallotti
 
ModulAngular
ModulAngularModulAngular
ModulAngular
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0
 
Angular js: routing
Angular js: routingAngular js: routing
Angular js: routing
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
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
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 
ASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel ModelASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel Model
 
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
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
 
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediJava Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
 
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
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.Micro
 

Viewers also liked

What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
 
Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoAndrea Dottor
 
Il buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceIl buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceAndrea Dottor
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web AppsAndrea Dottor
 
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webAndrea Dottor
 
L'evoluzione del web
L'evoluzione del webL'evoluzione del web
L'evoluzione del webAndrea Dottor
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaAndrea Dottor
 
ASP.NET performance optimization
ASP.NET performance optimizationASP.NET performance optimization
ASP.NET performance optimizationAndrea Dottor
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroAndrea Dottor
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreAndrea Dottor
 

Viewers also liked (12)

What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
 
Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppo
 
Il buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceIl buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita felice
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
 
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
 
ASP.NET Core
ASP.NET CoreASP.NET Core
ASP.NET Core
 
L'evoluzione del web
L'evoluzione del webL'evoluzione del web
L'evoluzione del web
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
 
ASP.NET performance optimization
ASP.NET performance optimizationASP.NET performance optimization
ASP.NET performance optimization
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuro
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET Core
 
Atomic design
Atomic designAtomic design
Atomic design
 

Similar to Migliora il tuo codice con knockout.js

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 Appscodeblock
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockoutDotNetCampus
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the WebClaudio Gandelli
 
ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?Giorgio Di Nardo
 
SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)Sabino Labarile
 
Alessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte
 
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
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC FrameworkDotNetMarche
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS BuildGian Maria Ricci
 
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...Codemotion
 
Applicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiApplicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiMarco Breveglieri
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue jsGianfranco Castro
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angulardotnetcode
 

Similar to Migliora il tuo codice con knockout.js (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
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?
 
SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)
 
Alessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVC
 
MVC2: non solo tecnologia
MVC2: non solo tecnologiaMVC2: non solo tecnologia
MVC2: non solo tecnologia
 
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
 
Usare Knockout JS
Usare Knockout JSUsare Knockout JS
Usare Knockout JS
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC Framework
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS Build
 
ASP.NET MVC Intro
ASP.NET MVC IntroASP.NET MVC Intro
ASP.NET MVC Intro
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Applicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiApplicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e Delphi
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue js
 
Introduzione a Struts
Introduzione a StrutsIntroduzione a Struts
Introduzione a Struts
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
 

More from Andrea Dottor

Blazor ♥️ JavaScript
Blazor ♥️ JavaScriptBlazor ♥️ JavaScript
Blazor ♥️ JavaScriptAndrea Dottor
 
Blazor, lo sapevi che...
Blazor, lo sapevi che...Blazor, lo sapevi che...
Blazor, lo sapevi che...Andrea Dottor
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersAndrea Dottor
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormAndrea Dottor
 
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...Andrea Dottor
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiAndrea Dottor
 
What's New in ASP.NET Core 3
What's New in ASP.NET Core 3What's New in ASP.NET Core 3
What's New in ASP.NET Core 3Andrea Dottor
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPCAndrea Dottor
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
 
Real case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core graduallyReal case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core graduallyAndrea Dottor
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesAndrea Dottor
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiAndrea Dottor
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciutaAndrea Dottor
 
Customize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingCustomize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingAndrea Dottor
 
ASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cacheASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cacheAndrea Dottor
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Andrea Dottor
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
 
Deploy & Run on Azure App Service
Deploy & Run on Azure App ServiceDeploy & Run on Azure App Service
Deploy & Run on Azure App ServiceAndrea Dottor
 
Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniCreare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
 
Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Andrea Dottor
 

More from Andrea Dottor (20)

Blazor ♥️ JavaScript
Blazor ♥️ JavaScriptBlazor ♥️ JavaScript
Blazor ♥️ JavaScript
 
Blazor, lo sapevi che...
Blazor, lo sapevi che...Blazor, lo sapevi che...
Blazor, lo sapevi che...
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developers
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web Form
 
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
 
What's New in ASP.NET Core 3
What's New in ASP.NET Core 3What's New in ASP.NET Core 3
What's New in ASP.NET Core 3
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
Real case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core graduallyReal case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core gradually
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor Pages
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciuta
 
Customize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingCustomize ASP.NET Core scaffolding
Customize ASP.NET Core scaffolding
 
ASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cacheASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cache
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
Deploy & Run on Azure App Service
Deploy & Run on Azure App ServiceDeploy & Run on Azure App Service
Deploy & Run on Azure App Service
 
Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniCreare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5
 

Migliora il tuo codice con knockout.js

  • 1. Andrea Dottor – Microsoft MVP ASP.NET/IIS Migliora il tuo codice con Knockout.js
  • 2.  ...permette di scrivere codice  Disordinato  Difficile da leggere  Difficile da mantenere  ...non tutti ci sanno metter mano  Capita spesso che lo sviluppatore che ha scritto "quel" codice sia l'unico a conoscere come realmente funziona JavaScript è un linguaggio potente ma...
  • 3.  Semplificare il codice il più possibile  Più il codice è semplice e più sviluppatori ci sanno metter mano  Scrivere meno codice  Meno codice si scrive e meno probabilità di errori (ci dovrebbe essere)   Utilizzare una metodologia  Esistono molti pattern/librerie che semplificano la scrittura di codice JavaScript Soluzioni al disordine
  • 4.  Esistono molti Design Pattern possibili  MVC  MVP  MVVM  ...  Dobbiamo/possiamo scegliere tra quelli che conosciamo  Se sviluppiamo in WPF o per Windows Phone o per Windows 8...conosciamo già MVVM Quali metodologie possiamo adottare?
  • 5.  Knockou JS  http://knockoutjs.com/  BackBone JS  http://backbonejs.org/  Ember JS  http://emberjs.com/  Angular JS  http://angularjs.org/  ... Quali strumenti possiamo utilizzare?
  • 6.  Libreria che porta MVVM nel client  http://knockoutjs.com/  "Knockout is a JavaScript library that helps you to create rich, responsive display and editor user interfaces with a clean underlying data model. Any time you have sections of UI that update dynamically (e.g., changing depending on the user’s actions or when an external data source changes), KO can help you implement it more simply and maintainably." Che cos’è Knockout JS
  • 7.  Free, open source  MIT license  Pure JavaScript  works with any web framework  Small & lightweight  40kb minified... reduces to 14kb when using HTTP compression  No dependencies  Supports all mainstream browsers  IE 6+, Firefox 2+, Chrome, Opera, Safari (desktop/mobile)  Fully documentedAPI  docs, live examples, and interactive tutorials included Alcune info su knockout
  • 8.  Model  I dati forniti dall'applicazione. Una visualizzazione dei dati indipendente dalla UI.  Dati esposti tramite servizi, Web API, ...  View-Model  Una rappresentazione dei dati strutturata appositamente per l'UI. Esposizione delle proprietà e metodi che possono essere utilizzati nella View  Scritto in JavaScript  View  Si occupa di visualizzare le informazioni che il ViewModel espone, e permette di chiamarne i metodi  Uso di HTML5 MVVM: Model-View-ViewModel
  • 9.  Qualsiasi servizio esposto utilizzando REST è un ottimo model da utilizzare per knockout  WCF con WebHttpBinding  Web API  JsonResult  ...  Qualsiasi informazioni che siano in grado di arrivare al client  JSON contenuto in input[type=hidden]  ... Model
  • 10.  E' un oggetto JavaScript che espone metodi e proprietà  Deve essere la corretta rappresentazione dei dati per la View che si intende realizzare  Non ha nessun legame con le View  Non viene eseguito nessun $('#id') oppure document.getElementById('id') ViewModel function AppViewModel() { this.firstName = ko.observable("Bert"); this.lastName = ko.observable("Bertington"); this.fullName = ko.computed(function() { return this.firstName() + " " + this.lastName(); }, this); }
  • 11.  Definisce una proprietà "Observable"  Ad ogni cambiamento di valore della proprietà, la View viene subito notificata ed aggiornata  Genera un proxy sulla proprietà che fa si che Knockout possa aggiornare l'interfaccia, oppure tutte le proprietà che dipendono da essa  Si può agganciare una funzione che venga invocata al cambio di valore  viewModel.firstName.subscribe(function(newValue) { ...});  Simile al INotifyPropertyChanged ko.observable()
  • 12.  Definisce un array di tipo "Observable"  Un oggetto observableArray dispone di tutti i metodi degli array javascript  pop, push, shift, unshift, reverse, sort, splice, …  Può essere inizializzato e popolato direttamente nel costruttore  Ad ogni aggiunta, rimozione o cancellazione di un elemento, la View viene subito notificata del cambiamento  Paragonabile ad una ObservableCollection ko.observableArray()
  • 13.  Permette di definire proprietà di tipo calcolato  Sono anche queste "Observable"  Al cambiamento di una proprietà da cui questa dipende, viene ricalcolato il nuovo valore ed aggiornata la View ko.computed() this.fullName = ko.computed(function() { return this.firstName() + " " + this.lastName(); }, this);
  • 14.  Si deve fare uso di HTML5  KO fa uso dell'attributo data-bind per agganciare proprietà e metodi esposti dal ViewModel  Uso di template, foreach, with  Permette di ripetere facilmente porzioni di codice, usando un binding "innestato"  L'unico legame con il ViewModel è nel corretto utilizzo dei nomi di proprietà e metodi View <p>First name: <strong data-bind="text: firstName"></strong></p> <p>Last name: <strong data-bind="text: lastName"></strong></p> <p>First name: <input data-bind="value: firstName" /></p> <p>Last name: <input data-bind="value: lastName" /></p> <p>Full name: <strong data-bind="text: fullName"></strong></p>
  • 15.  La magia che unisce View e ViewModel è racchiusa in una semplice riga  Unisce un ViewModel utilizzando l'intera pagina come View  E' possibile associare il ViewModel ad una porzione di pagina  Permette di indentificare più View all'interno della stessa pagina HTML Collegare View e ViewModel ko.applyBindings(new AppViewModel()); ko.applyBindings(viewModelA, document.getElementById("one")); ko.applyBindings(viewModelB, document.getElementById("two"));
  • 16. demo
  • 17.  Il template di progetto di ASP.NET MVC 4 Single Page Application fa uso di knockout  Un valido esempio di SPA  E' possibile utilizzare JQuery Mobile in combinazione con KO  Attenzione, che JQM e KO lavorano entrambi dopo il caricamento del DOM e lo modificano  Da knockout spesso di deve richiamare il 'refresh' dei controlli  Esistono framework di SPA costruiti su Knockout  Pager.js  Durandal KO e Single Page Application
  • 19.  Libreria JavaScript basata su KO e JQuery che permette la realizzazione di applicazioni SPA  http://pagerjs.com/  Semplice da utilizzare  Non ha dipendende con framework CSS  A differenza di JQuery Mobile, pager.js si occupa solamente della navigazione tra pagine e non degli stili di visualizzazione Pager.js
  • 20.  Si occupa solo della parte di Single Page Application  Spesso si ha bisogno di un "qualcosa" che ci permetta di visualizzare/nascondere pagine  Non tutte le app hanno bisogno di framework complessi come JQuery Mobile  JQM forza l'uso ai suoi CSS  KO e JQM non lavorano sempre in coordianzione.  Spesso si deve fare refresh manuali di componenti della UI Perchè Pager.js?
  • 21. demo
  • 23.  Framework per la realizzazione di applicazioni SPA, che migliora/estende l'idea di MVVM di knockout  http://durandaljs.com/  Non solo Single Page Application  Clean MV* Architecture  JS & HTML Modularity  Simple App Lifecycle  Eventing, Modals, Message Boxes, etc.  Navigation & Screen State Management  Built on top of jQuery, Knockout & RequireJS Durandal
  • 24.  Organizzazione del codice  View e ViewModel splittati in file separati, e collegati solamente dal nome  Facilità nella manutenzione del codice  Ogni View e ViewModel è realizzato con uno specifico ruolo  La complessità è splittata/ridotta  Meno possibilità di conflitti al commit nel controllo sorgente  Implementazione di MVVM migliorata rispetto al solo Knockout  Netta separazione tra View e ViewModel Perchè Durandal?
  • 25. demo
  • 26. Migliora il tuo codice  Librerie JavaScript come Knockout, Durandal possono essere di aiuto per organizzare al meglio codice client  Librerie esterne non fanno miracoli  Richiedono disciplina e metodo nel loro utilizzo  L'ordine e la complessità di ciò che si scrive è nelle mani dello sviluppatore  L'impegno di scrivere codice migliore deve arrivare direttamente dallo sviluppatore  Pensa al principio KISS  Keep it simple, stupid  Più mantieni il codice semplice e più facile sarà leggerlo e manutenerlo
  • 27.
  • 28. feedback 10 o feedback su: • http://xedotnet.org/feedback • Codice: APR02 Email: andrea@dottor.net Blog: http://blog.dottor.net Twitter: http://twitter.com/dottor feedback