Как приручить реактивное программирование
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
1) Обеспечение возможности выполнить команду только при выполнении определенного условия.
Обычно для этого пользуются реализацией команды из какой-нибудь библиотеки, например, RelayCommand из MvvmLight. Из-за этого приходится писать большое количество инфраструктурного кода, который актуализирует CanExecute состояние команды.
Однако ReactiveCommand из ReactiveUI позволяет решить ту же задачу проще: перечислить свойства, которые влияют на CanExecute состояние команды, и сформировать из них условие, определяющее CanExecute состояние команды. И при изменении любого свойства автоматически будет актуализироваться CanExecute состояние команды, инфраструктурного кода больше не нужно.
2) Фильтрация данных.
Неизменный атрибут любого бизнес-приложения на любой платформе - список данных с фильтром, причем фильтр может быть достаточно сложным и содержать как простые элементы вроде CheckBox, так и ComboBox, и даже MultiSelector. Rx позволяет подписаться на событие об изменении каждого элемента фильтра и объединить все потоки событий в один, тем самым упрощая их обработку и делая её единообразной. Кроме того, Rx предоставляет дополнительные возможности, такие как задание интервала ожидания перед генерацией запроса по условиям фильтра, обработка результатов фильтрации в UI потоке.
3) Подписка на события/отписка от событий.
Ещё одна типовая задача - подписка на события и отписка от них. Rx предлагает удобный способ, когда при подписке создается IDisposable объект. Для отписки от события достаточно вызвать его метод Dispose.
4) Подписка на изменение свойства у объекта, реализующего INPC
Если подписываться на событие ProperyChanged, по в подписке нужно будет проверять, получили ли мы событие об изменении нужного нам свойства или какого-то другого. ReactiveUI предлагает более удобный механизм, который позволяет подписаться на событие об изменении только нужного нам свойства (или свойств), а также фильтровать поток событий и реагировать только на те из них, когда отслеживаемые свойства содержат определенные значения.