Programowanie reaktywne na platformie windows(ITAD)

23
1 © Rule Financial 2014 Programowanie reaktywne na platformie Windows Autor: Maciej Zbrzezny Rule Financial 2014.11.23

Transcript of Programowanie reaktywne na platformie windows(ITAD)

Page 1: Programowanie reaktywne na platformie windows(ITAD)

1© Rule Financial 2014

Programowanie reaktywne na platformie Windows

Autor: Maciej Zbrzezny

Rule Financial

2014.11.23

Page 2: Programowanie reaktywne na platformie windows(ITAD)

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

[email protected]

● @MaciejZbrzezny

Page 3: Programowanie reaktywne na platformie windows(ITAD)

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?

Page 4: Programowanie reaktywne na platformie windows(ITAD)

4© Rule Financial 2014

Problem: pobieranie danych

Dane

Daj mi Dane

Przetwarzam

Page 5: Programowanie reaktywne na platformie windows(ITAD)

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

Page 6: Programowanie reaktywne na platformie windows(ITAD)

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?

Page 7: Programowanie reaktywne na platformie windows(ITAD)

7© Rule Financial 2014

Ułatwmy sobie życie

Page 8: Programowanie reaktywne na platformie windows(ITAD)

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.

Page 9: Programowanie reaktywne na platformie windows(ITAD)

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ć.

Page 10: Programowanie reaktywne na platformie windows(ITAD)

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

Page 11: Programowanie reaktywne na platformie windows(ITAD)

11© Rule Financial 2014

Page 12: Programowanie reaktywne na platformie windows(ITAD)

12© Rule Financial 2014

Obserwowanie i subskrypcja zamiast przeglądania

Dane

Jestem zainteresowany

Danymi (subscribe)

Przetwarzam

Error

Dane

KONIEC

Page 13: Programowanie reaktywne na platformie windows(ITAD)

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()

Page 14: Programowanie reaktywne na platformie windows(ITAD)

14© Rule Financial 2014

Operatory LINQ na IObservable

Where Skip Take SelectIObse

rvable

<T>

IObse

rvable

<T>

Page 15: Programowanie reaktywne na platformie windows(ITAD)

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

Page 16: Programowanie reaktywne na platformie windows(ITAD)

16© Rule Financial 2014

Do dzieła…sprawdźmy...

Page 17: Programowanie reaktywne na platformie windows(ITAD)

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

Page 18: Programowanie reaktywne na platformie windows(ITAD)

18© Rule Financial 2014

ReactiveUI - podstawy

● ViewModel dziedziczy po ReactiveObject

● Properties:– Read/write

– Read-only

– Output-properties

● Reactive commands

Page 19: Programowanie reaktywne na platformie windows(ITAD)

19© Rule Financial 2014

Do dzieła…sprawdźmy...

Page 20: Programowanie reaktywne na platformie windows(ITAD)

20© Rule Financial 2014

Gdzie reactive extensions są wykorzystywane

● Bing

● Cortana

● Netflix

● Github for Windows

Page 21: Programowanie reaktywne na platformie windows(ITAD)

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

Page 22: Programowanie reaktywne na platformie windows(ITAD)

22© Rule Financial 2014

Dziękuję za uwagę. Pytania?

https://github.com/maciej-progtech/WindowsReaciveProgramming_ITAD2014

Page 23: Programowanie reaktywne na platformie windows(ITAD)

23© Rule Financial 2014