2. 2
Кто я?
• 7+ лет .NET
• Разработка корпоративных приложений
• Люблю хипстерские библиотеки
3. 3
Почему я здесь?
• 6 лет назад приручил Rx
• 3 года назад приручил ReactiveUI
• С тех пор активно использую в XAML
проектах
4. 4
Многие не используют
• Не знают о Rx и ReactiveUI
• Находятся под влиянием «мифов» о
реактивном программировании
5. 5
О чем мы поговорим?
• Что такое реактивное программирование?
• Для каких задач его использовать?
• Развеем мифы, которые мешают его
использовать
6. 6
Опрос
• Кто не знает, что такое реактивное
программирование?
• Кто знаком с Rx и ReactiveUI, но не решился
использовать в своих проектах?
• Кто использовал Rx или ReactiveUI на
продакшене?
11. 11
Реактивная программа
var A = 10;
var B <- A + 1;
<- оператор «судьбы»
// Чему равно В?
11
A = A + 1;
// А теперь чему равно В?
12
12. 12
Реактивное программирование
Реактивное программирование – это
парадигма программирования,
ориентированная на потоки данных и
распространение изменений.
Потоки данных – последовательность значений
каждой переменной или свойства класса.
Распространение изменений – уведомления
«заинтересованных» об изменениях.
13. 13
Pull
Pull – класс A взаимодействует с
классом B и вытягивает из него
необходимые данные
Class A Class B
GetData()
Interacts with
14. 14
Push
Push – класс B самостоятельно
выталкивает данные, как только они
становятся доступны.
Class A
ProcessData()
Class BReacts on
15. 15
Примеры из жизни
• Вычислимые ячейки Excel
• Принцип Голливуда – «Не звоните нам,
мы сами вам позвоним»
• Push - уведомления
17. 17
Прошлое реактивного
программирования на C#
• Bindable Linq
• https://bindablelinq.codeplex.com
• 1.0 beta 1
• Последний коммит 5 окт 2008
• Continuous LINQ
• http://clinq.codeplex.com/
• 2.2.0.1
• Последний коммит 23 июня 2010
• Obtics
• https://obtics.codeplex.com/
• 1.0.13.0
• Последний коммит 11 июня 2011
18. 18
Настоящее
• Reactive Extensions (Rx)
• Эрик Мейер из MS Research
• ReactiveUI
• библиотека на базе Rx для создания
элегантных UI для всех XAML платформ
19. 19
Внутри .NET
public interface IObservable<T>
{
IDisposable Subscribe(IObserver<T> observer);
}
public interface IObserver<T>
{
void OnNext(T value);
void OnCompleted();
void OnError(Exception error);
}
20. 20
Оператор судьбы через Rx
var A = new Subject<int>();
// B <- A + 3
var B = A.Select(a => a + 3);
// C <- A * B
var С = A.Zip(B, (a, b) => a * b);
A.OnNext(1);
30. 30
Достоинства ReactiveCommand
• Не нужно мониторить значения свойств
Login и Password
• Не нужно мониторить начало и конец
асинхронной операции логина
31. 31
Что ещё умеет ReactiveUI
• Навигация ViewModel First
• Маппинг View и ViewModel ручной
• IoC на основе Splat
• Валидация (не в фреймворке, в сэмплах)
• Есть плагин для Fody, который генерит INPC
Но все равно как MVVM фреймворк ReactiveUI
слабоват
Поэтому используем из него только команды и
привязки
38. 38
Недостатки ReactiveUI
• IoC привязан к Splat
• Есть MessageBus, без которого можно
обойтись
• Неудобная для WinRT и UWP навигация
ViewModelFirst
39. 39
Используем совместно с другим
MVVM
Используем сильные стороны:
• ReactiveCommand
• Привязки на уровне ViewModel
(ObservableForProperty и WhenAny)
Не используем слабые стороны:
• Навигация
• IoC
43. 43
Подведем итоги
• ReactiveUI можно (и нужно ) использовать:
• Реактивные команды
• Привязки на уровне ViewModel вместо
MessageBus
• ReactiveUI используем как дополнение к
любимому MVVM фреймворку
46. 46
Что дальше делать?
• Познакомиться: скачать Rx или ReactiveUI,
посмотреть сэмплы
• Отладить приложение для Codefest,
сообщество будет вам благодарно
• Попробовать Rx и ReactiveUI на
продакшене
47. 47
Полезные ссылки
Классное видео для начинающих
https://vimeo.com/43172610
Про Rx для разных языков программирования
http://reactivex.io/
Официальная страница
http://reactiveui.net/
Код, примеры
https://github.com/reactiveui
Autofac
https://github.com/alexeyzimarev/RxUI6WithAutofac