(node.js) web development - prościej

182
(node.js ) web development prościej

Upload: mateusz-kwasniewski

Post on 17-Feb-2017

873 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: (node.js) Web Development - prościej

(node.js ) web development

prościej

Page 2: (node.js) Web Development - prościej

plan wycieczki• Intro: 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

• 7 - Infrastruktura Heroku jako kod JS

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

wersja prelekcji: 4.4.2

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

o Was

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

2013 2014 2015 2016

{

Page 6: (node.js) Web Development - prościej

node

JAVA

Page 7: (node.js) Web Development - prościej
Page 8: (node.js) Web Development - prościej
Page 9: (node.js) Web Development - prościej

2016

Page 10: (node.js) Web Development - prościej

efekt Lindy

Page 11: (node.js) Web Development - prościej
Page 12: (node.js) Web Development - prościej
Page 13: (node.js) Web Development - prościej

MAM nowy framework

Page 14: (node.js) Web Development - prościej
Page 15: (node.js) Web Development - prościej

mój kontekst

Page 16: (node.js) Web Development - prościej

publicznie dostępne serwisy informacyjne

Page 17: (node.js) Web Development - prościej
Page 18: (node.js) Web Development - prościej

Devs

HTML/JS

Page 19: (node.js) Web Development - prościej
Page 20: (node.js) Web Development - prościej
Page 21: (node.js) Web Development - prościej

500kB of JS

HTML+CSS

Page 22: (node.js) Web Development - prościej

curl

wget

bot

Page 23: (node.js) Web Development - prościej
Page 24: (node.js) Web Development - prościej

HTML

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

1. ARCHITEKTURA APLIKACJIResource-Oriented Client Architecture

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

Resource-Oriented Client Architecture

• A collection of simple recommendations for decent Web application frontends

http://roca-style.org/

Page 27: (node.js) Web Development - prościej
Page 28: (node.js) Web Development - prościej

ROCA =

REST (backend) +

Progressive Enhancement (frontend)

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

REST

2000

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

article front page zasoby (Resources)

baza danych stan zasobów (State)

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

article front page zasoby (Resources)

reprezentacja (REpresentation)JSON XML HTML

(hypermedia)

baza danych stan zasobów (State)

Page 32: (node.js) Web Development - prościej
Page 33: (node.js) Web Development - prościej

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

Progressive Enhancement

2003

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

Unobtrusive JS

2002

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

HTML CSS JS

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

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

czynnik ludzki

Page 38: (node.js) Web Development - prościej

wow! ale

data binding

Page 39: (node.js) Web Development - prościej

wow uniflow

ale vdom

flux reflux redux

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

nie ma thisa!

ale FRP

mercury ? ?

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

Efekt IKEA

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

stawka w grze (ang. skin in the game)

Page 43: (node.js) Web Development - prościej
Page 44: (node.js) Web Development - prościej

2. NODE.js w naszym ekosystemie

Wzorzec: Backends For Frontends

Page 45: (node.js) Web Development - prościej
Page 46: (node.js) Web Development - prościej

Web

Web

Native

Page 47: (node.js) Web Development - prościej

Web

Web

Native

Page 48: (node.js) Web Development - prościej

strona główna artykuł WebTV quizy

Page 49: (node.js) Web Development - prościej

strona główna artykuł WebTV quizy

monolit

HTML

Page 50: (node.js) Web Development - prościej

strona główna artykuł WebTV quizy

HTML

bounded context

Page 51: (node.js) Web Development - prościej

strona główna artykuł WebTV quizy

bounded context

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

strona główna artykuł WebTV quizy

bounded context

co z UI?

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

strona główna artykuł WebTV quizy

bounded context

Single Page App

BFF

JSON

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

strona główna artykuł WebTV quizy

bounded context

SPA

JSONBFF BFF BFF

monolith

HTML HTML HTML

Page 55: (node.js) Web Development - prościej

strona główna artykuł WebTV quizy

bounded context

SPA

JSONBFF BFF BFF

monolith

HTML HTML HTML

Page 56: (node.js) Web Development - prościej

strona główna artykuł WebTV quizy

bounded context

SPA

JSONBFF BFF BFF

monolith

HTML HTML HTML

Page 57: (node.js) Web Development - prościej

moja pierwsza aplikacja w node.js

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

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

nietrywialnych aplikacjach

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

require('third-party-module')

require('./mymodule')

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

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

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

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

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

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

Page 63: (node.js) Web Development - prościej
Page 64: (node.js) Web Development - prościej

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

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

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

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

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

Page 67: (node.js) Web Development - prościej
Page 68: (node.js) Web Development - prościej

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

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

a(b(), c());

Page 70: (node.js) Web Development - prościej
Page 71: (node.js) Web Development - prościej
Page 72: (node.js) Web Development - prościej
Page 73: (node.js) Web Development - prościej

ale…

Page 74: (node.js) Web Development - prościej

expect(this.style.of.assertions).to.not.be.ok;

Page 75: (node.js) Web Development - prościej

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

Page 76: (node.js) Web Development - prościej

mikroserwisy

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

APIklient

Page 78: (node.js) Web Development - prościej

much starrrssuch popular

maaany forks

Page 79: (node.js) Web Development - prościej
Page 80: (node.js) Web Development - prościej

ponawianie nieudanych

zapytań

Page 81: (node.js) Web Development - prościej
Page 82: (node.js) Web Development - prościej
Page 83: (node.js) Web Development - prościej
Page 84: (node.js) Web Development - prościej
Page 85: (node.js) Web Development - prościej

APIklient

Page 86: (node.js) Web Development - prościej

APIklient

Page 87: (node.js) Web Development - prościej

APIklient

Page 88: (node.js) Web Development - prościej
Page 89: (node.js) Web Development - prościej
Page 90: (node.js) Web Development - prościej
Page 91: (node.js) Web Development - prościej

APIklient

Page 92: (node.js) Web Development - prościej

odpowiedź API

Page 93: (node.js) Web Development - prościej

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

Page 94: (node.js) Web Development - prościej

APIklient

Page 95: (node.js) Web Development - prościej
Page 96: (node.js) Web Development - prościej
Page 97: (node.js) Web Development - prościej
Page 98: (node.js) Web Development - prościej

5. AsynCHORNICZNOŚĆtresura aynchronicznej bestii

Page 99: (node.js) Web Development - prościej

Java —> JS

Page 100: (node.js) Web Development - prościej

sync —> async

Page 101: (node.js) Web Development - prościej

var article = articleRepository.getById(“ap1234”);

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

articleRepository.getById('ap1234', function(err, data) { if(err) handleError(err); else processData(data);});

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

articleRepository.getById('ap1234', function(err, data) { if(err) handleError(err); else processData(data); });

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

callbacks async.js

promises

generators

async functions

streams

observables

event emitter

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

CALLBACKs

Page 106: (node.js) Web Development - prościej
Page 107: (node.js) Web Development - prościej
Page 108: (node.js) Web Development - prościej
Page 109: (node.js) Web Development - prościej

bardziej subtelne problemy

Page 110: (node.js) Web Development - prościej

Co jeżelidoA i doD

są synchroniczne?

Page 111: (node.js) Web Development - prościej

łatwo wymieszać kod synchroniczny i

asynchroniczny

Page 112: (node.js) Web Development - prościej
Page 113: (node.js) Web Development - prościej
Page 114: (node.js) Web Development - prościej

inversion of control trust issues

Page 115: (node.js) Web Development - prościej

Hey I just met you

Page 116: (node.js) Web Development - prościej

And this is crazy

Page 117: (node.js) Web Development - prościej

but here’s my handler

Page 118: (node.js) Web Development - prościej
Page 119: (node.js) Web Development - prościej
Page 120: (node.js) Web Development - prościej
Page 121: (node.js) Web Development - prościej

Promisy na ratunekjQuery Deferred

native

bluebirdQ

Page 122: (node.js) Web Development - prościej

same ol’ callback hell

Page 123: (node.js) Web Development - prościej
Page 124: (node.js) Web Development - prościej
Page 125: (node.js) Web Development - prościej

not ES7 enough?

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

6. STYL PROGRAMOWANIAthis Javascript makes me fat

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

spójny styl

Page 130: (node.js) Web Development - prościej

konwencje nazewnicze

i

formatowanie?

Page 131: (node.js) Web Development - prościej
Page 132: (node.js) Web Development - prościej

idomy

Page 133: (node.js) Web Development - prościej
Page 134: (node.js) Web Development - prościej
Page 135: (node.js) Web Development - prościej
Page 136: (node.js) Web Development - prościej

DI?

Page 137: (node.js) Web Development - prościej

bezframeworków

Page 138: (node.js) Web Development - prościej

Asynchroniczność?

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

Promisy

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

trucizna

Page 141: (node.js) Web Development - prościej

The Annoying Parts

Confusion

var self = this;

fn.bind(this);

new i funkcje

konstruktora

Page 142: (node.js) Web Development - prościej
Page 143: (node.js) Web Development - prościej
Page 144: (node.js) Web Development - prościej

przeciętne książki

Page 145: (node.js) Web Development - prościej

przyzwoite książki

Page 146: (node.js) Web Development - prościej

świetne książki

Page 147: (node.js) Web Development - prościej
Page 148: (node.js) Web Development - prościej
Page 149: (node.js) Web Development - prościej
Page 150: (node.js) Web Development - prościej

Functional programming

academic absurdity

practical stuff

functions as first class

citizens

closures

pure functions

map/filter/reduce

y-combinatorscurrying

partial applicationfn composition

immutability

pointfree

functors

monadscomonads

f-algebras

recursion

Page 151: (node.js) Web Development - prościej

look ma no this, new and prototype

Page 152: (node.js) Web Development - prościej

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

Page 153: (node.js) Web Development - prościej

this-full JS makes me fat

Page 154: (node.js) Web Development - prościej

7. NODE.JS i AUTOMATYZACJAgdy wszystko nas zawodzi

Page 155: (node.js) Web Development - prościej

if [ "$a" -eq 273 ]

WHAAAT!!??

Page 156: (node.js) Web Development - prościej
Page 157: (node.js) Web Development - prościej

klik klik

Page 158: (node.js) Web Development - prościej
Page 159: (node.js) Web Development - prościej

“klikanie nie skaluje się, klikanie nie jest audytowalne”

Page 160: (node.js) Web Development - prościej

“klikanie nie skaluje się, klikanie nie jest audytowalne”

uncle bob

Page 161: (node.js) Web Development - prościej

“klikanie nie skaluje się, klikanie nie jest audytowalne”

Douglas Crockford

Page 162: (node.js) Web Development - prościej

high level infrastructure as code

Page 163: (node.js) Web Development - prościej

nie działa

Page 164: (node.js) Web Development - prościej

Heroku infrastructure as code

Page 165: (node.js) Web Development - prościej
Page 166: (node.js) Web Development - prościej
Page 167: (node.js) Web Development - prościej
Page 168: (node.js) Web Development - prościej
Page 169: (node.js) Web Development - prościej
Page 170: (node.js) Web Development - prościej
Page 171: (node.js) Web Development - prościej
Page 172: (node.js) Web Development - prościej

Podsumowanie•efekt Lindy i czarne łabędzie

•styl ROCA alternatywą dla SPA

•node.js do pisania Backend For Frontend

•DI - można bez frameworków

•Klient HTTP - nie tylko “happy path”

•Właściwa abstrakcja do async

•JS bez this

•JS jako język do automatyzacji

Page 173: (node.js) Web Development - prościej

Podsumowanie•efekt Lindy i czarne łabędzie

•styl ROCA alternatywą dla SPA

•node.js do pisania Backend For Frontend

•DI - można bez frameworków

•Klient HTTP - nie tylko “happy path”

•Właściwa abstrakcja do async

•JS bez this

•JS jako język do automatyzacji

Page 174: (node.js) Web Development - prościej

Podsumowanie•efekt Lindy i czarne łabędzie

•styl ROCA alternatywą dla SPA

•node.js do pisania Backend For Frontend

•DI - można bez frameworków

•Klient HTTP - nie tylko “happy path”

•Właściwa abstrakcja do async

•JS bez this

•JS jako język do automatyzacji

Page 175: (node.js) Web Development - prościej

Podsumowanie•efekt Lindy i czarne łabędzie

•styl ROCA alternatywą dla SPA

•node.js do pisania Backend For Frontend

•DI - można bez frameworków

•Klient HTTP - nie tylko “happy path”

•Właściwa abstrakcja do async

•JS bez this

•JS jako język do automatyzacji

Page 176: (node.js) Web Development - prościej

Podsumowanie•efekt Lindy i czarne łabędzie

•styl ROCA alternatywą dla SPA

•node.js do pisania Backend For Frontend

•DI - można bez frameworków

•Klient HTTP - nie tylko “happy path”

•Właściwa abstrakcja do async

•JS bez this

•JS jako język do automatyzacji

Page 177: (node.js) Web Development - prościej

Podsumowanie•efekt Lindy i czarne łabędzie

•styl ROCA alternatywą dla SPA

•node.js do pisania Backend For Frontend

•DI - można bez frameworków

•Klient HTTP - nie tylko “happy path”

•Właściwa abstrakcja do async

•JS bez this

•JS jako język do automatyzacji

Page 178: (node.js) Web Development - prościej

Podsumowanie•efekt Lindy i czarne łabędzie

•styl ROCA alternatywą dla SPA

•node.js do pisania Backend For Frontend

•DI - można bez frameworków

•Klient HTTP - nie tylko “happy path”

•Właściwa abstrakcja do async

•JS bez this

•JS jako język do automatyzacji

Page 179: (node.js) Web Development - prościej

Podsumowanie•efekt Lindy i czarne łabędzie

•styl ROCA alternatywą dla SPA

•node.js do pisania Backend For Frontend

•DI - można bez frameworków

•Klient HTTP - nie tylko “happy path”

•Właściwa abstrakcja do async

•JS bez this

•JS jako język do automatyzacji

Page 180: (node.js) Web Development - prościej

JS node.js

Page 181: (node.js) Web Development - prościej

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