Page 1
plan wycieczki• Jestem przytłoczony. pomocy!
• 1 - Architektura UI w stylu ROCA
• 2 - Node.js jako Backend for Frontend
• 3 - Dependency Injection w node.js
• 4 - Stabilny klient HTTP do produkcyjnych zastosowań
• 5 - Asynchroniczność: tresura asynchronicznej bestii
• 6 - Styl kodowania: dlaczego jestem gruby od tego JS
Page 2
(node.js ) web development
prościej
Page 3
wersja prelekcji: 0.10.0
Page 12
publicznie dostępne serwisy informacyjne
Page 16
http://realgamernewz.com/wp-content/uploads/2014/06/GameDev-Denis-Rozaj-of-IzBoot-Abusing-Applicants.jpg
http://sportsradiopd.com/wp-content/uploads/2014/10/phoneyeller.jpg
http://pixabay.com/static/uploads/photo/2012/02/28/15/40/adult-18377_640.jpg
Page 17
500kB of JS
HTML+CSS
http://realgamernewz.com/wp-content/uploads/2014/06/GameDev-Denis-Rozaj-of-IzBoot-Abusing-Applicants.jpg
http://sportsradiopd.com/wp-content/uploads/2014/10/phoneyeller.jpg
http://pixabay.com/static/uploads/photo/2012/02/28/15/40/adult-18377_640.jpg
Page 20
1. ARCHITEKTURA APLIKACJIResource-Oriented Client Architecture
Page 21
Resource-Oriented Client Architecture
• A collection of simple recommendations for decent Web application frontends
http://roca-style.org/
Page 23
ROCA =
REST (backend) +
Progressive Enhancement (frontend)
Page 25
article front page zasoby (Resources)
baza danych stan zasobów (State)
Page 26
article front page zasoby (Resources)
reprezentacja (REpresentation)JSON XML HTML
(hypermedia)
baza danych stan zasobów (State)
Page 27
article front page zasoby (Resources)
reprezentacja (REpresentation)JSON XML HTML
przeglądarka bot wget/curl
baza danych stan zasobów (State)
Transfer
stan aplikacji/interakcji
Page 28
Progressive Enhancement
2003
Page 29
Unobtrusive JS
2002
Page 30
HTML CSS JS
http://roca-airways.herokuapp.com/
Page 32
wow! ale
data binding
Page 33
wow uniflow
ale vdom
flux reflux redux
Page 34
nie ma thisa!
ale FRP
mercury ? ?
Page 36
stawka w grze (ang. skin in the game)
Page 37
2. NODE.js w naszym ekosystemie
Wzorzec: Backends For Frontends
Page 41
strona główna artykuł WebTV quizy
Page 42
strona główna artykuł WebTV quizy
node.js BFF
Java monolithSPA
backend
PHPgroovyJavanode
node.js BFF
Page 43
strona główna artykuł WebTV quizy
node.js BFF
Java monolithSPA
PHPgroovyJavanode
node.js BFF
Page 44
http://scs-architecture.org/
Page 46
header
article
footer
Page 51
wywołanie funkcji
Page 52
var processed = new ESI().process(html);
Page 53
http://upload.wikimedia.org/wikipedia/commons/5/53/Server-multiple.svg
Page 54
http://upload.wikimedia.org/wikipedia/commons/5/53/Server-multiple.svg
https://openclipart.org/image/300px/svg_to_png/16073/kml-Document.png
Page 57
article video
article text
link - sport widget
core content
article text
Page 58
<a role="widget" class="widget-link" href=”//example.com/sportWidget”> sport widget </a>
link - sport widget
Page 59
read URL
article video
article text
link - sport widget
article text
Page 60
HTTP
GET
article video
article text
link - sport widget
article text
Page 61
HTML + (CSS) + (JS)
article video
article text
sport widget
article text
Page 62
HTML only
HTML+CSS+JS
Page 63
moja pierwsza aplikacja w node.js
Page 64
3. dependency injectionstruktura, testowalność i zastępowalność komponentów w
nietrywialnych aplikacjach
Page 65
Q: jak nadpisać require w testach? A: użyj modułu rewire/proxyquire ja: proszę nie
Page 66
Q: jak nadpisać require w testach? A: użyj modułu rewire/proxyquire ja: proszę nie
Page 67
Q: jak nadpisać require w testach? A: użyj modułu rewire/proxyquire ja: proszę nie
Page 68
Q: jak robić DI w node.js? A: ktoś pracuje nad klonem Springa ja: oby nie!
Page 69
Q: jak robić DI w node.js? A: ktoś pracuje nad klonem Springa ja: oby nie!
Page 70
Q: jak robić DI w node.js? A: ktoś pracuje nad klonem Springa ja: oby nie!
Page 72
new A(new B(), new C());
Page 76
tylko bezstanowe ‘require’ rozsiane po kodzie
np. require(‘lodash’), require(‘url’), require(‘q’)
Page 77
http://www.schibsted.pl/2015/12/how-to-do-dependency-
injection-in-node-js/
Page 79
4. w poszukiwaniu idealnego klienta HTTPgdy request to za mało
Page 82
much starrrssuch popular
maaany forks
Page 84
ponawianie nieudanych
zapytań
Page 96
“śpieszmy się kochać odpowiedzi z API, tak szybko odchodzą”
Page 101
5. AsynCHORNICZNOŚĆtresura aynchronicznej bestii
Page 104
callbacks async.js
promises
generators
async functions
streams
observables
event emitter
Page 106
Nawet Kapitan Oczywisty to wie
• callback hell
• niewygodna obsługa wyjątków
• wymaga dodatkowych bibliotek (e.g. async.js)
Page 107
bardziej subtelne problemy
Page 108
łatwo wymieszać kod synchroniczny i
asynchroniczny
Page 111
inversion of control trust issues
Page 112
Hey I just met you
Page 113
And this is crazy
Page 114
but here’s my handler
Page 117
Promisy na ratunekjQuery Deferred
native
bluebirdQ
Page 118
same ol’ callback hell
Page 121
not synchronous enough?
Page 122
http://mcfunley.com/choose-boring-technology-slides
Page 123
6. STYL PROGRAMOWANIAthis Javascript makes me fat
Page 126
konwencje nazewnicze
i
formatowanie?
Page 129
JS - the annoying parts
• var self = this;
• fn.bind(this);
• new i funkcje konstruktora
Page 132
przeciętne książki
Page 133
przyzwoite książki
Page 138
look ma no this, new and prototype
Page 139
Siła woli i aktywność umysłowa korzystają z tej samej puli zasobów
Page 140
this-full JS makes me fat
Page 142
https://github.com/kwasniew https://twitter.com/kwasniew http://www.slideshare.net/kwasniew https://www.linkedin.com/pub/mateusz-kwasniewski/6/a97/583
Mateusz Kwaśniewski