33
Alex Krause [email protected] @alex0ptr Reaktive Programmierung in verständlichen Worten

Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Alex Krause

[email protected]

@alex0ptr

Reaktive Programmierung

in verständlichen Worten

Page 2: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

@alex0ptr

Page 3: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Worüber ich heute nicht rede… 🤐

Effizienz

Skalierung

non-Blocking I/O

message-driven

Aktoren

Resilience

Reaktive Systeme

Reactive Manifesto

@alex0ptr

Page 4: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Worüber wir heute reden.

Wie sieht das im Einsatz aus?

Was ist Reaktive Programmierung?

Wo liegt der Nutzen?

@alex0ptr

Page 5: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Was ist Reaktive Programmierung? 🤔

@alex0ptr

Page 6: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Ganz am Anfang:

Functional Reactive Programming🧐🎓

@alex0ptr

Page 7: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Functional Reactive Programming

1. reaktive Produzenten

2. reaktive Deklaration

3. automatische Propagierung

@alex0ptr

Page 8: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Reactive Producers

Behaviours, Signals

‣ (zeit-)kontinuerlich sich ändernde Werte

‣ erzeugen Wertänderungen

Events, Streams, Sequences (of Events)

‣ zeitdiskret, potentiell nicht endlich

‣ erzeugen Ereignisse

@alex0ptr

Page 9: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Demo

@alex0ptr

Das tut mir jetzt mehr weh als euch! 😬

Page 10: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Dependency Graph ⚙

a = 1

b = 2

c = a + b

“a = 2”

=> “c == 4”

@alex0ptr

a b

c

Page 11: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Was ist Reaktive Programmierung? ✔

“was” (deklarativ) anstatt “wann”, “wie” (Reihenfolge,

Abhängigkeiten)

@alex0ptr

Page 12: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Wo liegt der Nutzen? 🤔

@alex0ptr

Page 13: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Alternativen:

Observer Pattern und Callbacks

@alex0ptr

Page 14: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Alternativen:

Observer Pattern und Callback-😈🔥

@alex0ptr

Page 15: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Beispiel: Linie zeichnen

@alex0ptr

Maier and Odersky “Deprecating the Observer Pattern with Scala.React”

Page 16: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

@alex0ptr

Seiteneffekte

Kapselung

Komposition

Resourcen Management

Separation of Concerns

Semantische Distanz

Uniformität

Abstraktion

Datenkonsistenz

var path: Path = null

val moveObserver = { (event: MouseEvent) !=> path.lineTo(event.position) draw(path) }

control.addMouseDownObserver { event !=> path = new Path(event.position) control.addMouseMoveObserver(moveObserver) }

control.addMouseUpObserver { event !=> control.removeMouseMoveObserver(moveObserver) path.close() draw(path) }

Page 17: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Ausblick

@alex0ptr

app.mouseDown() .map(position !-> new Line(position, position)) .flatMap(line !-> app.mouseMove() .takeUntilOther(app.mouseUp()) .map(position !-> new LineEndChanged(line, position))) .subscribe(Examples!::updateLine); !// side effects

Page 18: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

@alex0ptr

Verständlichkeit.

Page 19: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Zeichen der Zeit 🗞

‣ Frontend, Mobile, Desktop, Backend

‣ Technology Radar: “ADOPT” ReactiveX

‣ Java 9: JEP 266, Observable

‣ Spring 5: Reactor + WebFlux

@alex0ptr

Page 20: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Wie sieht das im Einsatz aus? 🤔

@alex0ptr

Page 21: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Praxisrelevante (JVM) Lösungen

@alex0ptr

Page 22: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

@alex0ptr

ReactiveX

Page 23: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

@alex0ptr

RxJava

RxJS

Rx.NET

RxScala

RxSwift

etc.

Page 24: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

@alex0ptr

Reactor

Page 25: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Reactive Streams

@alex0ptr

“…is an initiative to provide a standard for asynchronous

stream processing with non-blocking backpressure.”

Ratpack Play Framework

ElasticSearch

Akka Streams

MongoDB

Vert.x

RxJava

Redis

Slick

ReactorCassandra

Spring

Micronaut

Page 26: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Reactive Streams

@alex0ptr

public interface Publisher<T> { public void subscribe(Subscriber<? super T> s); }

public interface Subscriber<T> { public void onSubscribe(Subscription s); public void onNext(T t); public void onError(Throwable t); public void onComplete(); }

public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {}

public interface Subscription { public void request(long n); public void cancel(); }

Page 27: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Backpressure

@alex0ptr

💪 💪

Page 28: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Backpressure

@alex0ptr

💪 😰

Page 29: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

Backpressure

@alex0ptr

💪 😎✋4

Page 30: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

🎊 Demo 🎉

@alex0ptrhttps://github.com/alex0ptr/reactive-talk

Page 31: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

xing.com/companies/qawaregmbh

linkedin.com/company/qaware-gmbh slideshare.net/qaware

twitter.com/qaware github.com/qaware

youtube.com/qawaregmbh

Alex Krause

[email protected]

@alex0ptr

Page 32: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

QAware GmbH Mainz

Rheinstraße 4 D

55116 Mainz

Tel.: +49 (0) 6131 215 69 – 0

Fax: +49 (0) 6131 215 69 – 68 xing.com/companies/qawaregmbh

linkedin.com/company/qaware-gmbh slideshare.net/qaware

twitter.com/qaware github.com/qaware

youtube.com/qawaregmbh

Page 33: Reaktive Programmierung in verständlichen Worten Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr. Reactive Producers

QAware GmbH München

Aschauer Straße 32

81549 München

Tel.: +49 (0) 89 23 23 15 – 0

Fax: +49 (0) 89 23 23 15 – 129 xing.com/companies/qawaregmbh

linkedin.com/company/qaware-gmbh slideshare.net/qaware

twitter.com/qaware github.com/qaware

youtube.com/qawaregmbh