Reactive Extensions und LINQ
Asynchrone und ereignisbasierte Verarbeitung
Die Reactive Extensions (Rx) sind eine Bibliothek für die Verarbeitung asynchroner und ereignisbasierter Informationen durch Beobachtung einer Datenquelle bezüglich eingehender oder sich ändernder Informationen. Welche Ausgabe sollte die Anwendung in Bezug auf die Eingabe erzeugen und wie kann diese Relation verständlich in Code beschrieben werden? Als Lösung gibt es LINQ, eine beschreibende und ausdrucksstarke Spracherweiterung, die Eingaben mithilfe von Transformationsoperationen effektiv und verständlich in Ergebnisse überführt. Standard-LINQ-Operatoren arbeiten ausschließlich auf statischen, nicht aber auf eingehenden oder sich ändernden Daten. Hier zeigen die Reactive Extensions ihre Stärke.
Einstieg in LINQ und Rx
- Die .NET yield State Machine und der Enumerator als read-only forward Cursor
- Events, Callbacks, Delegaten, anonyme Methoden und Lambda Expressions
- Konzeptionelle Dualität – Push gegenüber Pull – Enumerable / Enumerator gegenüber Observable / Observer
- ObservableCollections gegenüber IObservable
- Visualisierung mit Marble-Diagrammen
- LINQ to Everything mit IObservable<T> und IQbservable<T>
- Abgrenzung zur Task Parallel Library und Dataflow
Funktionale Programmierung
- Goods und Bads – Bedeutung der verzögerten Ausführung, Seiteneffekte und Monaden in Bezug zum LINQ-Programmiermodell
- Funktionale Patterns wie Closure, Partial Application Function, Continuations und Pattern Matching, Currying, Memorization
- Hilfreiche Monaden wie Unit, Identity und Maybe
LINQ
- Die Generator-Operatoren Range und Empty
- Map / Reduce und die Core Query-Operatoren Aggregate, SelectMany, GroupBy, OrderBy
- Einsatz der Interactive Extensions (Ix) (Generate, Repeat, Do, ForEach, Catch, Memorize, Defer, Retry, Buffer, Concat, Scan)
- Massendatenverarbeitung mit Parallel LINQ
- Eigene LINQ-Erweiterungen
- Expression Trees, IQueryable<T> und QueryableProvider
Rx Grundlagen
- Generator- und Query-Operatoren (Generate, Create, Select, SelectMany, Group, Join, Zip, Amb)
- Event Stream OnNext / OnComplete / OnError
- Multiplexer / Demultiplexer mit Subjects
- Testen von asynchronen Operationen mit virtueller Zeit
- Bridge-Operatoren (ToAsync, FromEvent, FromAsyncPattern, ToEvent, Notifications)
- Time-based-Operatoren (Window, Buffer, Timestamp, OnNextAt, Delay, Throttle)
- Asynchrone Operatoren (ToAsync, Start, Finally)
- Event Stream Join-Pattern (When, And, Then)
- Threading und Schedulers
- Unsubscribe mit Disposables und Cancellations
- Seiteneffektfreie Verarbeitung (Do, Materialize, Dematerialize)
- Hot und Cold Observables (Publish, Multicast)
- Eigene Rx-Erweiterungen
Rx in der Praxis
- Komplexe Web Service-Verarbeitung
- Bidirektionale Anwendungskommunikation mittels Aktoren
- Message / Event Bus und Message / Event Processing
- Komplexe UI-Interaktionen („Drag and Drop“, Multi-Touch)
- Verarbeitung von Sensorik- und Messdaten
- Generatoren und Simulatoren
- Asynchrone Massendatenverarbeitung (ETL, File Streams, Message Streams)
Rx für JavaScript (RxJs)
- HTML5 / jQuery DOM Events mit RxJs
- HTML5 JavaScript API mit RxJs (HTML5 Geolocation)
- Konsumieren von Web Services mit jQuery AJAX und RxJs
- Verwendung für skalierbaren Netzwerkanwendungen mit Node.js
Reactive XAML – ReactiveUI
- MVVM mit Rx
- ViewModel als ReactiveObject
- Reactive Commands und Async Reactive Commands
- Observables zu Properties
- Materialisierung und Caching
- Web Services mit ReactiveUI