Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Reaktive Programmierung in verständlichen Worten

Alex Krause
November 18, 2018

Reaktive Programmierung in verständlichen Worten

Reaktive Programmierung, reaktive Systeme und das Reactive Manifesto rücken im Moment immer stärker in den Fokus der Java Community. Der Begriff Reaktive Programmierung wird hierbei häufig synonym mit Reaktiven Systemen verwendet, dabei ist Reaktive Programmierung eher ein gutes Werkzeug um diese zu implementieren. Reaktive Programmierung eignet sich darüber hinaus ausgezeichnet für parallele Programmierung, UI-Applikationen und das managen von Applikationszuständen. Der Vorteil liegt hierbei in dem verständlicherem Code der eine bessere Wiederverwendbarkeit aufweist. Ein häufig angenommener Nachteil ist die initial steilere Lernkurve.

In dem Vortrag geht es darum, die Grundlagen von Reaktiver Programmierung leicht verdaulich zu erklären und die Vorteile gegenüber Alternativen deutlich zu machen. Die zweite Hälfte des Vortrags besteht aus Praxisbeispielen und Tipps für den Einstieg in die Nutzung von konkreten Implementierungen, die den Reactive-Streams-Standard (JEP 266) implementieren. Hierbei verwenden wir zur Demonstration das Reactor Framework, welches auch die reaktive Kern-Komponente von Spring 5 und Spring Webflux ist.

Alex Krause

November 18, 2018
Tweet

More Decks by Alex Krause

Other Decks in Technology

Transcript

  1. Worüber ich heute nicht rede… Effizienz Skalierung non-Blocking I/O message-driven

    Aktoren Resilience Reaktive Systeme Reactive Manifesto @alex0ptr
  2. Worüber wir heute reden. Wie sieht das im Einsatz aus?

    Was ist Reaktive Programmierung? Wo liegt der Nutzen? @alex0ptr
  3. Reactive Producers Behaviours, Signals ‣ (zeit-)kontinuerlich sich ändernde Werte ‣

    erzeugen Wertänderungen Events, Streams, Sequences (of Events) ‣ zeitdiskret, potentiell nicht endlich ‣ erzeugen Ereignisse @alex0ptr
  4. Dependency Graph ⚙ a = 1 b = 2 c

    = a + b “a = 2” => “c == 4” @alex0ptr a b c
  5. @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) }
  6. 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
  7. Zeichen der Zeit ‣ Frontend, Mobile, Desktop, Backend ‣ Technology

    Radar: “ADOPT” ReactiveX ‣ Java 9: JEP 266, Observable ‣ Spring 5: Reactor + WebFlux @alex0ptr
  8. 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 Reactor Cassandra Spring Micronaut
  9. 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(); }
  10. 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
  11. 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