Как приручить реактивное программирование

Денис Цветцих

15 мая 2016

При разработке любого UWP приложения для бизнеса разработчикам приходится решать одни и те же задачи.

1) Обеспечение возможности выполнить команду только при выполнении определенного условия.
Обычно для этого пользуются реализацией команды из какой-нибудь библиотеки, например, RelayCommand из MvvmLight. Из-за этого приходится писать большое количество инфраструктурного кода, который актуализирует CanExecute состояние команды.
Однако ReactiveCommand из ReactiveUI позволяет решить ту же задачу проще: перечислить свойства, которые влияют на CanExecute состояние команды, и сформировать из них условие, определяющее CanExecute состояние команды. И при изменении любого свойства автоматически будет актуализироваться CanExecute состояние команды, инфраструктурного кода больше не нужно.

2) Фильтрация данных.
Неизменный атрибут любого бизнес-приложения на любой платформе - список данных с фильтром, причем фильтр может быть достаточно сложным и содержать как простые элементы вроде CheckBox, так и ComboBox, и даже MultiSelector. Rx позволяет подписаться на событие об изменении каждого элемента фильтра и объединить все потоки событий в один, тем самым упрощая их обработку и делая её единообразной. Кроме того, Rx предоставляет дополнительные возможности, такие как задание интервала ожидания перед генерацией запроса по условиям фильтра, обработка результатов фильтрации в UI потоке.

3) Подписка на события/отписка от событий.
Ещё одна типовая задача - подписка на события и отписка от них. Rx предлагает удобный способ, когда при подписке создается IDisposable объект. Для отписки от события достаточно вызвать его метод Dispose.

4) Подписка на изменение свойства у объекта, реализующего INPC
Если подписываться на событие ProperyChanged, по в подписке нужно будет проверять, получили ли мы событие об изменении нужного нам свойства или какого-то другого. ReactiveUI предлагает более удобный механизм, который позволяет подписаться на событие об изменении только нужного нам свойства (или свойств), а также фильтровать поток событий и реагировать только на те из них, когда отслеживаемые свойства содержат определенные значения.
blog comments powered by Disqus