More and more functionality is being shifted to the client side, more specifically it is very often moved to the Client’s browser. Developers and customers are also ever more conscious of user experience and interaction design. This talk will therefore focus on the whole development lifecycle – we will plan the interaction and user experience for a simple web application, develop it using advanced client-side techniques and very briefly touch on how to convince our MVC web application to play nice with mobile browsers as well. We will explore how to implement relevant UI patterns, look at best practices and focus on optimizing our application experience.
2. From UX to Finish
Anže Vodovnik
Software Architect @ Studio Pešec d.o.o.
3. Kdo sem?
Programski arhitekt
10+ let izkušenj
http://www.linkedin.com/in/avodovnik
Twitter: @avodovnik
http://lab.studiopesec.com
4. AGENDA
Proces razvoja web aplikacije – metro:Wife
Načrtovanje
Uporabniška izkušnja – kaj, kdaj, kako?
Implementacija – kaj, kdaj, kako?
Diskusija
5. PROCES RAZVOJA (WEB) APLIKACIJE
Razvoj (spletne) aplikacije je težaven
Različne in spreminjajoče se zahteve
Skalabilnost
Performanse
Robustnost
Povezljivost
Različni razvojni procesi
Waterfall
Agile
6. PROCES
Razvojna
Ideja Analitik Arhitekt Tester
ekipa
7. PROCES
Razvojna
Ideja Analitik UX Arhitekt Tester
ekipa
8. PROCES
Razvojna
Ideja Analitik UX Arhitekt Tester
ekipa
9. KAJ PA „UX“ SPLOH JE?
„A person's perceptions and
responses that result from the use or
anticipated use of a product, system
or service“
- ISO 9241-210; Ergonomics of human system interaction
10. KAJ PA „UX“ SPLOH JE?
„A person's perceptions and
responses that result from the use or
anticipated use of a product, system
or service“
- ISO 9241-210; Ergonomics of human system interaction
11. UPORABNIŠKA IZKUŠNJA, 2 1/2. del
Več posvečanja izkušnji kot uporabnosti
Efektivnost
Efikasnost
Subjektivno zadovoljstvo
} Tipični faktorji
uporabnosti
12. UPORABNIŠKA IZKUŠNJA, 2 2/2. del
Spletne strani & aplikacije
Marketing &
Branding
Oblikovanje
Uporabnost
Uporabniška izkušnja
13. KAKO RAZUMETI UPORABNIKOVA ČUSTVA?
Analiza
Kaj ljudem pomeni „address book“?
Kaj so problemi, ki jih imajo?
Konkurenca na področju
Analiza prisotnosti
Določimo story-e (+ persone)
Izris Wireframe-ov
Design
15. Sara & telefonski imenik
• UX ekspert & Informacijski Arhitekt
• (pozabljiva) lastnica iPhone-a
PROBLEM: izgubljeni kontakti
16. Sara & telefonski imenik
• UX ekspert & Informacijski Arhitekt
• (pozabljiva) lastnica iPhone-a
PROBLEM: izgubljeni kontakti
IDEJA: aplikacija za upravljanje s kontakti!
UX arhitekt Razvojna
Ideja Arhitekt Tester
/ analitik ekipa
17. UX arhitekt Razvojna
Ideja Arhitekt Tester
/ analitik ekipa
18. UX arhitekt Razvojna
Ideja Arhitekt Tester
/ analitik ekipa
19. UX arhitekt Razvojna
Ideja Arhitekt Tester
/ analitik ekipa
20. Implementacija
UX arhitekt Razvojna
Ideja Arhitekt Tester
/ analitik ekipa
21. UX in UPORABNIŠKI VMESNIK
Uporabniki so vedno zahtevnejši
Pričakovanja vedno višja
Klienti so neizkoriščeni
Brskalniki so vedno hitrejši
22.
23. KLIENTI
JavaScript podprt na glavnih platformah
Mobilno
Desktop (Windows, Mac)
Prvi (edini) stik uporabnika z aplikacijo
Čustveno dojemanje
Klient postaja svoja aplikacija
24. KLIENTI
JavaScript podprt na glavnih platformah
Mobilno
Desktop (Windows, Mac)
Prvi (edini) stik uporabnika z aplikacijo
Čustveno dojemanje
Klient postaja svoja aplikacija, ki teče na
eni strani in je na voljo tudi offline
25. PROBLEM
Razvijalci odkrivajo toplo vodo
Različne implementacije UI-ja
Prvo srečanje z jQueryem
Novo kladivo
DOM = žebelj
26.
27.
28. CILJI
Ali „kako si arhitekt želi, da bi aplikacija delovala“
1. Stanje & modeli morajo živeti na enem mestu
2. Spremembe modela se morajo odražati na
vseh mestih vmesnika, kjer se pojavlja
3. Enostavna struktura kode za vzdrževanje
4. Čim manj „framework“ & „glue“ kode
30. BACKBONE.JS
„Backbone supplies structure to JavaScript-heavy
applications by providing models with key-value binding
and custom events, collections with a rich API of
enumerable functions, views with declarative event
handling, and connects it all to your existing application
over a RESTful JSON interface. “
- http://documentcloud.github.com/backbone
31. BACKBONE.JS
Osnovni objekti
Modeli (Model)
Zbirke (Collection)
Pogledi (View)
Usmerjevalnik / aplikacija (Router)
Dogodki (Events)
Sinhronizacija
Kvazi JavaScript MVC
32. BACKBONE.JS
Malo zunanjih odvisnosti
Underscore.js
Json2.js (za sinhronizacijo)
jQuery (za View)
Enostavna uporaba
Vrhunska dokumentacija
33. Modeli
Poljubni atributi
Podatkovna struktura
var Contact = Backbone.Model.extend({});
var myContact = new Contact();
myContact.set({
firstName: 'Anze',
lastName: 'Vodovnik‚
});
34. Modeli, 2. del
var myContact = new Contact({
firstName: 'Anze',
lastName: 'Vodovnik‚
});
myContact.get(‚firstName‘);
36. Zbirke
Več kot le array
Sinhronizacija, eventi...
var AddressBook = Backbone.Collection.extend({
model: Contact,
initialize: function() {}
});
var myAddressBook = new AddressBook();
myAddressBook.add(myContact);
37. Pogledi
EDINA vez med UI in modelom
Manipulacija HTML-ja
38. Usmerjevalnik / aplikacija
Aplikacija = več povezanih pogledov
Poti (routes), akcije
var Workspace = Backbone.Router.extend({
routes: {
„details/:id“ : „details“,
„search/:query/p:page“ : „search“
},
details: function(id) { ... }
search: function(query, page) { ... }
});
39. M V C
Model
odel iew
View
ontroller
Router
Collection
44. Backbone.Sync
je funkcija
lahko jo prepišemo
lahko jo spremenimo
LocalStorage adapter - Jérôme Gravel-Niquet
https://github.com/jeromegn/localtodos
45. CILJI – PONOVNI PREGLED
Ali „kako si arhitekt želi, da bi aplikacija delovala“
1. Stanje & modeli morajo živeti na enem mestu
MODELI – Model, Collection
2. Spremembe modela se morajo odražati na
vseh mestih vmesnika, kjer se pojavlja
VIEW MODEL - Views
3. Enostavna struktura kode za vzdrževanje
MVC je dokaj poznan, uveljavljen
4. Čim manj „framework“ & „glue“ kode
46. FRAMEWORK & GLUE KODA
Ali „nočna mora vseh razvijalcev“
Pisanje lastnega ogrodja se ne splača
Ogromno obstoječih, dobrih
Nuget je vaš najboljši prijatelj
Diagnostika
Odvisnosti
Eventi
Komunikacija med widget-i
51. Underscore.js
Map/Reduce – štetje besed
var lyrics = [
{line : 1, words : "I'm a lumberjack and I'm okay"},
{line : 2, words : "I sleep all night and I work all day"},
{line : 3, words : "He's a lumberjack and he's okay"},
{line : 4, words : "He sleeps all night and he works all day"}
];
_(lyrics).chain()
.map(function(line) { return line.words.split(' '); })
.flatten()
.reduce(function(counts, word) {
counts[word] = (counts[word] || 0) + 1;
return counts; }, {})
.value(); => {lumberjack : 2, all : 4, night : 2 ... }
52. Underscore.js & Predloge (templates)
Out-of-the-box funkcionalnost
_.template();
Loči HTML od JavaScript/logike
58. POVZETEK
Razvoj je podrejen čustvom uporabnika in
izkušnji pri uporabi (UX)
Procesi so spremenjeni
Vedno večja pomembnost JavaScript
aplikacij
Arhitektura
Code reuse
59. POVZETEK
Razvoj je podrejen čustvom uporabnika in
izkušnji pri uporabi (UX) [good thing]
Procesi so spremenjeni [good thing]
Vedno večja pomembnost JavaScript
aplikacij [semi-good thing]
Arhitektura
Code reuse