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

Reaktive Programmierung für alle! Warum? Wie?

Reaktive Programmierung für alle! Warum? Wie?

Angular 2, Reactor, RxSwift, RxJava – das junge Paradigma der Reaktiven Programmierung hat sich schon auf zahlreichen Plattformen etabliert. Sogar in Java 9 wird es in Form der Reactive Streams Einzug erhalten.

In der ersten Hälfte des Talks möchten wir euch die Konzepte Reaktiver Programmierung und die Unterschiede zu anderen Ansätzen vorstellen – unabhängig von der konkreten Plattform. Im zweiten Teil zeigen wir Anwendungsmöglichkeiten und typische Stolperfallen anhand von RxJava.

Der Vortrag ist für Web-, Mobile- und Backend-Entwickler gleichermaßen interessant.

Alex Krause

May 18, 2017
Tweet

More Decks by Alex Krause

Other Decks in Programming

Transcript

  1. Worüber ich heute nicht rede… message-driven Reactive Manifesto non-blocking I/O

    reaktive Systeme Skalierung resilience Actors Effizienz
  2. Worüber ich heute rede… Was ist reaktive Programmierung? Warum will

    ich das einsetzen? Wie sieht das in der Praxis aus?
  3. Reactive Producers Behaviours ‣ (zeit-)kontinuerlich sich ändernde Werte ‣ erzeugen

    Wertänderungen Sequences (of Events) ‣ zeitdiskret, potentiell nicht endlich ‣ erzeugen Ereignisse / Signals / Events / Streams
  4. Ist das nicht das Selbe? Wertänderungen == Events? Was ist

    der aktuelle Wert eines Streams? Kann man auf Signals ‘filter’ anwenden?
  5. FRP continued ‣ lifting: explizit, implizit, mauell ‣ denotative semantik

    ‣ first-class ‣ evaluation model: push, pull, sampling ‣ glitches
  6. Umsetzung: Dependency Graph a = 1 b = 2 c

    = a + b “a = 2” => “c == 4” a b c
  7. Zusammenfassung Was? ‣ vereinfacht die Implementierung reaktiver Anwendungen ‣ “was”

    anstatt “wann”, “wie” (Reihenfolge, Abhängigkeiten)
  8. –Bainomugisha et al. “A Survey on Reactive Programming” “…abstract over

    time management, just as garbage collectors abstract over memory management.“
  9. 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) }
  10. –Salvaneschi et al. “An Empirical Study on Program Comprehension with

    Reactive Programming” „Results suggest that RP outperforms OO. The RP group provided more correct results, while not requiring more time to complete the tasks. In addition, we found evidence that understanding RP program requires less programming skills than OO programs.“
  11. Zeichen der Zeit ‣ Backend, Mobile, Web, Desktop ‣ Technology

    Radar: “ADOPT” ReactiveX ‣ Java 9: JEP 266, Observable ‣ Spring 5: Reactor + WebFlux
  12. Reactive Streams “…is an initiative to provide a standard for

    asynchronous stream processing with non-blocking backpressure.” Play Framework MongoDB Akka Streams Ratpack Spring Reactor RxJava Slick Vert.x Cassandra Elastic Search Redis
  13. Redet mit mir! Rx vs. Reactor RP Performanz und Effizienz

    Operator Fusion Spring 5 WebFlux / Functional API DevOps Microservices Cloud und Serverless
  14. Nächster Talk … Code Reuse durch Libraries: Open Source einfach

    selbst gemacht <Michael Zinn/> Juni 2017 > blog.cosee.biz > talks.cosee.biz