Post on 15-Jul-2015
transcript
1© Rule Financial 2014
Programowanie reaktywne na platformie Windows
Autor: Maciej Zbrzezny
Rule Financial
2014.11.23
2© Rule Financial 2014
O mnie
● Nazywam się Maciej Zbrzezny
● Pracuje w firmie Rule Financial.
● Tworzę oprogramowanie wykorzystujące platformę .NET(głównie C#).
● Autor bloga „Programowanie i Technologie” (http://maciej-progtech.blogspot.com/).
● MCP
● maciejzbrzezny@gmail.com
● @MaciejZbrzezny
3© Rule Financial 2014
Dla kogo?
● Czy zdarzyło Ci się tworzyć aplikacje, które wykorzystywały wywołania asynchroniczne?
● Czy, wywołania asynchroniczne sprawiły problemy?
● Czy wolałbyś otrzymywać dane zamiast o każdą daną się dopraszać?
● Czy znasz LINQ i chciałbyś go wykorzystywać w większym zakresie?
4© Rule Financial 2014
Problem: pobieranie danych
Dane
Daj mi Dane
Przetwarzam
5© Rule Financial 2014
Asynchroniczność
● Dzisiejszy świat jest asynchroniczny, a my nie chcemy być blokowani
● Źródeł danych może być wiele, co w przypadku, gdy musimy połączyć dane z wielu z nich
● Możemy nie być zainteresowaniu wszystkimi danymi jak je wybierać, czy filtrować
● Jesteśmy przyzwyczajeni do prostych rozwiązań, najłatwiej przeglądać po prostu kolekcje danych
6© Rule Financial 2014
Asynchroniczność – potencjalne rozwiązania
● Osobny thread / task
● Asynchronous Programming Model (IAsyncResult BeginDoSomething, EndDoSomething)
● Event-based Asynchronous Programming (DoSomethingAsync, event DoSomethingCompletedEventHandler, DoSomethingCompleted, AsyncCompletedEventArgs)
● Task-based Asynchronous Programming (async/await)
● Inne?
7© Rule Financial 2014
Ułatwmy sobie życie
8© Rule Financial 2014
Misja RX
The Reactive Extensions (Rx)...
...is a library to compose asynchronous and event-based programs using observable collections and LINQ-stylequery operators.
9© Rule Financial 2014
Rx …
● Pozwala na uproszczenie kodu związanego z programowaniem asynchronicznym oraz opartym na zdarzeniach,
● Daje możliwość komponowania (łączenia) różnych asynchronicznych operacji oraz ich wyników.
● Oferuje inne podejście do kolekcji oraz zdarzeń. W Rx są one traktowane jako źródła danych, które możemy obserwować.
10© Rule Financial 2014
Gdzie można znaleźć RX?
● Nie ma RX w .NET framework, ale:
– Można dla nich pobrać (najlepiej poprzez Nuget'a – szukamy RX)
– Od .NET 4.0 przygotowano już pewne ułatwienia
● Rx jest też dostępne dla:
– Silverlight (od wer. 3, starsze wersje RX)
– Windows Phone (od wer. 7, dostępne już w ROM)
– XNA (od wer. 3)
– RxJS - Reactive Extensions for JavaScript (on GitHub)
– RxJava – Reactive Extensions for the JVM (on GitHub)
– Xamarin platform
11© Rule Financial 2014
12© Rule Financial 2014
Obserwowanie i subskrypcja zamiast przeglądania
Dane
Jestem zainteresowany
Danymi (subscribe)
Przetwarzam
Error
Dane
KONIEC
13© Rule Financial 2014
Obserwowanie i subskrypcja zamiast przeglądania
● Konstruujemy / pobieramy IObservable. (W Rx jest wiele metod pomocniczych tworzące IObservable z tablic, list, zdarzeń, strumieni, ….)
● Subskrybujemy przekazując nasz obserwator (IObserver) lub odpowiednie delegaty.
● Subskrybować można na różnych wątkach (CurrentThreadScheduler, ImmediateScheduler, NewThreadScheduler, TaskPoolScheduler, ThreadPoolScheduler, CoreDispatcherScheduler)
● Wykonujemy „Dispose” na subskrypcji której dłużej nie potrzebujemy
I
O
b
s
e
r
v
a
b
l
e
<
T
>client
OnNext()
OnNext()
OnNext()
OnNext()
OnNext()
OnNext()
14© Rule Financial 2014
Operatory LINQ na IObservable
Where Skip Take SelectIObse
rvable
<T>
IObse
rvable
<T>
15© Rule Financial 2014
Komponowanie strumieni…
• Amb
• Concat
• SelectMany
• Merge
• Zip
• CombineLatest
• ForkJoin
--A--A--A--|
-----------B--B--B--|Concat --A--A--A--B--B--B--|
--A--A--A--|
----B--B--B--|Amb --A--A--A--|
--A--B--C--|
--X--Y--Z--|SelectMany
-(AX)(AY)(BX)(BY)
(AZ)(CX)(BZ)(CY)(CZ)|
-A--B--C---|
--X--Y--Z--|Merge --AX-BY-CZ--|
-A--B--C---|
--X--Y--Z--|Zip -(AX)-(BY)-(CZ)--|
-A----B--C--|
-UWXYZ--|CombineLatest
-----------(CZ)--|
-(AU)(AW)(BX)(BY)(CZ)|
-A----B--C--|
-UWXYZ--|ForkJoin
16© Rule Financial 2014
Do dzieła…sprawdźmy...
17© Rule Financial 2014
ReactiveUI (MVVM framework)
● Pozwala na wykorzystanie Reactive Extensions to tworzenia w pełni testowalnych UI, dla różnych platform (desktopowych i mobilnych).
● Platformy:● Xamarin.iOS
● Xamarin.Android
● Xamarin.Mac
● WPF
● Windows Forms
● Windows Phone 8
● Windows Store Apps
18© Rule Financial 2014
ReactiveUI - podstawy
● ViewModel dziedziczy po ReactiveObject
● Properties:– Read/write
– Read-only
– Output-properties
● Reactive commands
19© Rule Financial 2014
Do dzieła…sprawdźmy...
20© Rule Financial 2014
Gdzie reactive extensions są wykorzystywane
● Bing
● Cortana
● Netflix
● Github for Windows
21© Rule Financial 2014
Literatura
Channel 9 a zwłaszcza:Mike Taulty - Reactive Extensions for .NET for the Rest of Us: http://channel9.msdn.com/Events/DevDays/DevDays-2011-Netherlands/Devdays014
Bart de Smet - DevCamp 2010 Keynote - Rx: Curing your asynchronous programming blues: http://channel9.msdn.com/Blogs/codefest/DC2010T0100-Keynote-Rx-curing-your-asynchronous-programming-blues
Data Developer Center > Learn > Reactive Extensions (Rx) > Beginner's Guide to Reactive Extensions for .NET (http://msdn.microsoft.com/en-us/data/gg577611) a zwłaszczaDesign Guidelines.
http://jen20.com/
http://www.reactiveui.net
22© Rule Financial 2014
Dziękuję za uwagę. Pytania?
https://github.com/maciej-progtech/WindowsReaciveProgramming_ITAD2014
23© Rule Financial 2014