Developing HTML5 Application using MVVM pattern

Report
Developing HTML5
Application using MVVM
pattern
Pekka Ylenius
This presentation

Presentation is for developers

Not much for designers

No CSS3 nor Canvas demos

Contanins demos and code samples

Generic info also
Myself

Hardcore c# developer

Tried to avoid JavaScript as long as possible

Have been working a lot with SilverLight and ASP.Net
(UpdatePanel was Ajax enough for me)

I started moving to Javascript word after Microsoft

SilverLight was ”killed”

Huge promoting for Windows 8 App development with Javascript

Azure Mobile Services support only Javascript serverside scripts

New Office Store is also HTML+Javascript only
How I moved to client side

Started moving to client side programming 3-4 years ago

jQuery made it easy for everyone to program simple
scripts

Combining Asp.Net controls and jQuery components was
painful

Searched for way to do databinding with web

Finally founded Knockout
Debugging Javascript

Painful at beginning

Visual Studio 2010 supported stepping inside Javascript
code

Currently Google Chrome and Mozilla Firefox have
excellent debuggers

Debug console helped tracing

Visual Studio 2012 has much better support for debugging
Javascript

Currently debugging Javasript is almost as easy as
debuggin c#
Difference between HTML5 app and server
side HTML pages

HTML5 application loads once at statup / HTML pages are
reloading after every click of button

HTML5 app is like Excel or Word

No need to send intall package with every document

HTML5 app can work offline also

Much better performance because only little or no data is
transferred when working inside application
What is Model-View-ViewModel (MVVM)
pattern

Originated from Microsoft

Targeted at HTML5, WPF, Silverlight, WP7, WP8

Based on MVC pattern

Better unit testing

No dependencies to MS technologies
Model-View-ViewModel

Model is actual object saved to database


View is HTML page


In phonebook app Model would be one contact
Everything that is made visible for user
ViewModel is part if model that is exposed to web page

Used to combine and parse information for View

Used to restrict information from View

Helper methods needed by UI

When we live in browser DOM everything is accessible by user
Why MVVM

Pattern separates different layers in specific way so work responsibility and
work can be divided.

View


Because UI testing is the most difficult area of testing, amount of code in View is
minimized.

View does not have access to model, it only binds to data provided by ViewModel.

It does not need to know how to save data or when move to different view. It just
knows how to command ViewModel to save data.
ViewModel

Responsibility is to load and save models. And sometimes parse it ready for View.
ViewModel does not know how to show data. It just offers interface for View to
bind to.
Why to use MVVM with HTML5 app

Basically for same reasons as in any other environments
also.

To have easy to read and testable applications.

Actual data is not saved inside inputs but inside viewmodel

Only one place for data

Enables bi-directional binding of data

Easy to load data from server and save back to server
KnockoutJS

Knockout makes it possible to do bi-directional binding
with HTML page

Knockout comes with ASP.MVC and Web Pages projects

Other options for Knockout exist also

Knockout does only one narrow thing but does it well. And
there are other libraries to fulfill other needs which I will
present later also.
Knockout demo

Live learning demo from Knockout website

http://learn.knockoutjs.com/#/?tutorial=collections
SPA – Sigle Page Application

Gmail is one example of SPA

No page loadings when using application

Uses inpage # URL for navigating inside application

Searches and lists can be populated still use network
connectivity
SPA CRM Application demo

Simple CRM Application demo

Hot Towel SPA template

Knockout for data bindings

Durandal for navigation and UI

Breeze for data mangement
PhoneGap

Library for using HTML5 applications in most of Phones and
Tablets

Common APIs for contacts, GPS, etc.

http://phonegap.com/about/feature/
PhoneGap demo

Moving previous CRM demo app to WP8

similar documents