Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Reaktive Programmierung in verständlichen Worten

65 views

Published on

Java Forum Stuttgart 2018: Vortrag von Alex Krause (@alex0ptr, Senior Softwareingenieur bei QAware)

Abstract:
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.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Reaktive Programmierung in verständlichen Worten

  1. 1. Alex Krause alex.krause@qaware.de @alex0ptr Reaktive Programmierung in verständlichen Worten
  2. 2. Worüber ich heute nicht rede… 🤐 Effizienz Skalierung non-Blocking I/O message-driven Aktoren Resilience Reaktive Systeme Reactive Manifesto @alex0ptr
  3. 3. Worüber wir heute reden. Wie sieht das im Einsatz aus? Was ist Reaktive Programmierung? Wo liegt der Nutzen? @alex0ptr
  4. 4. Was ist Reaktive Programmierung? 🤔 @alex0ptr
  5. 5. Ganz am Anfang: Functional Reactive Programming 🧐 🎓 @alex0ptr
  6. 6. Functional Reactive Programming 1. reaktive Produzenten 2. reaktive Deklaration 3. automatische Propagierung @alex0ptr
  7. 7. Reactive Producers Behaviours, Signals ‣ (zeit-)kontinuerlich sich ändernde Werte ‣ erzeugen Wertänderungen Events, Streams, Sequences (of Events) ‣ zeitdiskret, potentiell nicht endlich ‣ erzeugen Ereignisse @alex0ptr
  8. 8. Demo @alex0ptr Das tut mir jetzt mehr weh als euch! 😬
  9. 9. Dependency Graph ⚙ a = 1 b = 2 c = a + b “a = 2” => “c == 4” @alex0ptr a b c
  10. 10. Was ist Reaktive Programmierung? ✔ “was” (deklarativ) anstatt “wann”, “wie” (Reihenfolge, Abhängigkeiten) @alex0ptr
  11. 11. Wo liegt der Nutzen? 🤔 @alex0ptr
  12. 12. Alternativen: Observer Pattern und Callbacks @alex0ptr
  13. 13. Alternativen: Observer Pattern und Callback-😈🔥 @alex0ptr
  14. 14. Beispiel: Linie zeichnen @alex0ptr Maier and Odersky “Deprecating the Observer Pattern with Scala.React”
  15. 15. @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) }
  16. 16. Sneak Peak @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
  17. 17. @alex0ptr Verständlichkeit.
  18. 18. Zeichen der Zeit 🗞 ‣ Frontend, Mobile, Desktop, Backend ‣ Technology Radar: “ADOPT” ReactiveX ‣ Java 9: JEP 266, Observable ‣ Spring 5: Reactor + WebFlux @alex0ptr
  19. 19. Wie sieht das im Einsatz aus? 🤔 @alex0ptr
  20. 20. Praxisrelevante (JVM) Lösungen @alex0ptr
  21. 21. @alex0ptr ReactiveX
  22. 22. @alex0ptr RxJava RxJS Rx.NET RxScala RxSwift etc.
  23. 23. @alex0ptr Reactor
  24. 24. 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
  25. 25. 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(); }
  26. 26. Backpressure @alex0ptr 💪 💪
  27. 27. Backpressure @alex0ptr 💪 😰
  28. 28. Backpressure @alex0ptr 💪 😎✋ 4
  29. 29. 🎊 Demo 🎉 @alex0ptr https://github.com/alex0ptr/reactive-talk
  30. 30. xing.com/companies/qawaregmbh linkedin.com/company/qaware-gmbh slideshare.net/qaware twitter.com/qaware github.com/qaware youtube.com/qawaregmbh Alex Krause alex.krause@qaware.de @alex0ptr
  31. 31. 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 QAware 32
  32. 32. 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 33

×