Top Banner
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
143

(node.js) Web development - prościej (pl)

Feb 17, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: (node.js) Web development - prościej (pl)

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 (pl)

(node.js ) web development

prościej

Page 3: (node.js) Web development - prościej (pl)

wersja prelekcji: 0.10.0

Page 4: (node.js) Web development - prościej (pl)

o Was

Page 5: (node.js) Web development - prościej (pl)

2015

Page 6: (node.js) Web development - prościej (pl)
Page 7: (node.js) Web development - prościej (pl)

2016

Page 8: (node.js) Web development - prościej (pl)

efekt Lindy

Page 9: (node.js) Web development - prościej (pl)
Page 10: (node.js) Web development - prościej (pl)
Page 11: (node.js) Web development - prościej (pl)

mój kontekst

Page 12: (node.js) Web development - prościej (pl)

publicznie dostępne serwisy informacyjne

Page 13: (node.js) Web development - prościej (pl)
Page 14: (node.js) Web development - prościej (pl)

Devs

HTML/JS

Page 15: (node.js) Web development - prościej (pl)
Page 16: (node.js) Web development - prościej (pl)

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: (node.js) Web development - prościej (pl)

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 18: (node.js) Web development - prościej (pl)

curl

wget

bot

Page 19: (node.js) Web development - prościej (pl)
Page 20: (node.js) Web development - prościej (pl)

1. ARCHITEKTURA APLIKACJIResource-Oriented Client Architecture

Page 21: (node.js) Web development - prościej (pl)

Resource-Oriented Client Architecture

• A collection of simple recommendations for decent Web application frontends

http://roca-style.org/

Page 22: (node.js) Web development - prościej (pl)
Page 23: (node.js) Web development - prościej (pl)

ROCA =

REST (backend) +

Progressive Enhancement (frontend)

Page 24: (node.js) Web development - prościej (pl)

REST

2000

Page 25: (node.js) Web development - prościej (pl)

article front page zasoby (Resources)

baza danych stan zasobów (State)

Page 26: (node.js) Web development - prościej (pl)

article front page zasoby (Resources)

reprezentacja (REpresentation)JSON XML HTML

(hypermedia)

baza danych stan zasobów (State)

Page 27: (node.js) Web development - prościej (pl)

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: (node.js) Web development - prościej (pl)

Progressive Enhancement

2003

Page 29: (node.js) Web development - prościej (pl)

Unobtrusive JS

2002

Page 30: (node.js) Web development - prościej (pl)

HTML CSS JS

http://roca-airways.herokuapp.com/

Page 31: (node.js) Web development - prościej (pl)

czynnik ludzki

Page 32: (node.js) Web development - prościej (pl)

wow! ale

data binding

Page 33: (node.js) Web development - prościej (pl)

wow uniflow

ale vdom

flux reflux redux

Page 34: (node.js) Web development - prościej (pl)

nie ma thisa!

ale FRP

mercury ? ?

Page 35: (node.js) Web development - prościej (pl)

Efekt IKEA

Page 36: (node.js) Web development - prościej (pl)

stawka w grze (ang. skin in the game)

Page 37: (node.js) Web development - prościej (pl)

2. NODE.js w naszym ekosystemie

Wzorzec: Backends For Frontends

Page 38: (node.js) Web development - prościej (pl)
Page 39: (node.js) Web development - prościej (pl)

Web

Web

Native

Page 40: (node.js) Web development - prościej (pl)

Web

Web

Native

Page 41: (node.js) Web development - prościej (pl)

strona główna artykuł WebTV quizy

Page 42: (node.js) Web development - prościej (pl)

strona główna artykuł WebTV quizy

node.js BFF

Java monolithSPA

backend

PHPgroovyJavanode

node.js BFF

Page 43: (node.js) Web development - prościej (pl)

strona główna artykuł WebTV quizy

node.js BFF

Java monolithSPA

PHPgroovyJavanode

node.js BFF

Page 44: (node.js) Web development - prościej (pl)

http://scs-architecture.org/

Page 45: (node.js) Web development - prościej (pl)

złożone zasoby

Page 46: (node.js) Web development - prościej (pl)

header

article

footer

Page 47: (node.js) Web development - prościej (pl)
Page 48: (node.js) Web development - prościej (pl)
Page 49: (node.js) Web development - prościej (pl)

varnish/nginx

Page 50: (node.js) Web development - prościej (pl)
Page 51: (node.js) Web development - prościej (pl)

wywołanie funkcji

Page 52: (node.js) Web development - prościej (pl)

var processed = new ESI().process(html);

Page 53: (node.js) Web development - prościej (pl)

http://upload.wikimedia.org/wikipedia/commons/5/53/Server-multiple.svg

Page 54: (node.js) Web development - prościej (pl)

http://upload.wikimedia.org/wikipedia/commons/5/53/Server-multiple.svg

https://openclipart.org/image/300px/svg_to_png/16073/kml-Document.png

Page 55: (node.js) Web development - prościej (pl)
Page 56: (node.js) Web development - prościej (pl)
Page 57: (node.js) Web development - prościej (pl)

article video

article text

link - sport widget

core content

article text

Page 58: (node.js) Web development - prościej (pl)

<a role="widget" class="widget-link" href=”//example.com/sportWidget”> sport widget </a>

link - sport widget

Page 59: (node.js) Web development - prościej (pl)

read URL

article video

article text

link - sport widget

article text

Page 60: (node.js) Web development - prościej (pl)

HTTP

GET

article video

article text

link - sport widget

article text

Page 61: (node.js) Web development - prościej (pl)

HTML + (CSS) + (JS)

article video

article text

sport widget

article text

Page 62: (node.js) Web development - prościej (pl)

HTML only

HTML+CSS+JS

Page 63: (node.js) Web development - prościej (pl)

moja pierwsza aplikacja w node.js

Page 64: (node.js) Web development - prościej (pl)

3. dependency injectionstruktura, testowalność i zastępowalność komponentów w

nietrywialnych aplikacjach

Page 65: (node.js) Web development - prościej (pl)

Q: jak nadpisać require w testach? A: użyj modułu rewire/proxyquire ja: proszę nie

Page 66: (node.js) Web development - prościej (pl)

Q: jak nadpisać require w testach? A: użyj modułu rewire/proxyquire ja: proszę nie

Page 67: (node.js) Web development - prościej (pl)

Q: jak nadpisać require w testach? A: użyj modułu rewire/proxyquire ja: proszę nie

Page 68: (node.js) Web development - prościej (pl)

Q: jak robić DI w node.js? A: ktoś pracuje nad klonem Springa ja: oby nie!

Page 69: (node.js) Web development - prościej (pl)

Q: jak robić DI w node.js? A: ktoś pracuje nad klonem Springa ja: oby nie!

Page 70: (node.js) Web development - prościej (pl)

Q: jak robić DI w node.js? A: ktoś pracuje nad klonem Springa ja: oby nie!

Page 71: (node.js) Web development - prościej (pl)
Page 72: (node.js) Web development - prościej (pl)

new A(new B(), new C());

Page 73: (node.js) Web development - prościej (pl)

a(b(), c());

Page 74: (node.js) Web development - prościej (pl)
Page 75: (node.js) Web development - prościej (pl)
Page 76: (node.js) Web development - prościej (pl)

tylko bezstanowe ‘require’ rozsiane po kodzie

np. require(‘lodash’), require(‘url’), require(‘q’)

Page 77: (node.js) Web development - prościej (pl)

http://www.schibsted.pl/2015/12/how-to-do-dependency-

injection-in-node-js/

Page 78: (node.js) Web development - prościej (pl)
Page 79: (node.js) Web development - prościej (pl)

4. w poszukiwaniu idealnego klienta HTTPgdy request to za mało

Page 80: (node.js) Web development - prościej (pl)

mikroserwisy

Page 81: (node.js) Web development - prościej (pl)

APIklient

Page 82: (node.js) Web development - prościej (pl)

much starrrssuch popular

maaany forks

Page 83: (node.js) Web development - prościej (pl)
Page 84: (node.js) Web development - prościej (pl)

ponawianie nieudanych

zapytań

Page 85: (node.js) Web development - prościej (pl)
Page 86: (node.js) Web development - prościej (pl)
Page 87: (node.js) Web development - prościej (pl)
Page 88: (node.js) Web development - prościej (pl)
Page 89: (node.js) Web development - prościej (pl)

APIklient

Page 90: (node.js) Web development - prościej (pl)

APIklient

Page 91: (node.js) Web development - prościej (pl)

APIklient

Page 92: (node.js) Web development - prościej (pl)
Page 93: (node.js) Web development - prościej (pl)
Page 94: (node.js) Web development - prościej (pl)

APIklient

Page 95: (node.js) Web development - prościej (pl)

odpowiedź API

Page 96: (node.js) Web development - prościej (pl)

“śpieszmy się kochać odpowiedzi z API, tak szybko odchodzą”

Page 97: (node.js) Web development - prościej (pl)

APIklient

Page 98: (node.js) Web development - prościej (pl)
Page 99: (node.js) Web development - prościej (pl)
Page 100: (node.js) Web development - prościej (pl)
Page 101: (node.js) Web development - prościej (pl)

5. AsynCHORNICZNOŚĆtresura aynchronicznej bestii

Page 102: (node.js) Web development - prościej (pl)

Java —> JS

Page 103: (node.js) Web development - prościej (pl)

sync —> async

Page 104: (node.js) Web development - prościej (pl)

callbacks async.js

promises

generators

async functions

streams

observables

event emitter

Page 105: (node.js) Web development - prościej (pl)

CALLBACKs

Page 106: (node.js) Web development - prościej (pl)

Nawet Kapitan Oczywisty to wie

• callback hell

• niewygodna obsługa wyjątków

• wymaga dodatkowych bibliotek (e.g. async.js)

Page 107: (node.js) Web development - prościej (pl)

bardziej subtelne problemy

Page 108: (node.js) Web development - prościej (pl)

łatwo wymieszać kod synchroniczny i

asynchroniczny

Page 109: (node.js) Web development - prościej (pl)
Page 110: (node.js) Web development - prościej (pl)
Page 111: (node.js) Web development - prościej (pl)

inversion of control trust issues

Page 112: (node.js) Web development - prościej (pl)

Hey I just met you

Page 113: (node.js) Web development - prościej (pl)

And this is crazy

Page 114: (node.js) Web development - prościej (pl)

but here’s my handler

Page 115: (node.js) Web development - prościej (pl)
Page 116: (node.js) Web development - prościej (pl)
Page 117: (node.js) Web development - prościej (pl)

Promisy na ratunekjQuery Deferred

native

bluebirdQ

Page 118: (node.js) Web development - prościej (pl)

same ol’ callback hell

Page 119: (node.js) Web development - prościej (pl)
Page 120: (node.js) Web development - prościej (pl)
Page 121: (node.js) Web development - prościej (pl)

not synchronous enough?

Page 123: (node.js) Web development - prościej (pl)

6. STYL PROGRAMOWANIAthis Javascript makes me fat

Page 124: (node.js) Web development - prościej (pl)
Page 125: (node.js) Web development - prościej (pl)

spójny styl

Page 126: (node.js) Web development - prościej (pl)

konwencje nazewnicze

i

formatowanie?

Page 127: (node.js) Web development - prościej (pl)

idomy

Page 128: (node.js) Web development - prościej (pl)
Page 129: (node.js) Web development - prościej (pl)

JS - the annoying parts

• var self = this;

• fn.bind(this);

• new i funkcje konstruktora

Page 130: (node.js) Web development - prościej (pl)
Page 131: (node.js) Web development - prościej (pl)
Page 132: (node.js) Web development - prościej (pl)

przeciętne książki

Page 133: (node.js) Web development - prościej (pl)

przyzwoite książki

Page 134: (node.js) Web development - prościej (pl)

świetne książki

Page 135: (node.js) Web development - prościej (pl)
Page 136: (node.js) Web development - prościej (pl)
Page 137: (node.js) Web development - prościej (pl)
Page 138: (node.js) Web development - prościej (pl)

look ma no this, new and prototype

Page 139: (node.js) Web development - prościej (pl)

Siła woli i aktywność umysłowa korzystają z tej samej puli zasobów

Page 140: (node.js) Web development - prościej (pl)

this-full JS makes me fat

Page 141: (node.js) Web development - prościej (pl)
Page 142: (node.js) Web development - prościej (pl)

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

Page 143: (node.js) Web development - prościej (pl)