Что такое реактивное программирование?

В настоящее время все говорят о реактивном программировании, и вам интересно изучить новую вещь, называемую реактивным программированием. Возможно, вы видели, что он использовался в нескольких местах, но вы все еще немного запутались и хотели бы получить некоторые пояснения.

В этой статье мы познакомимся с основными концепциями реактивного программирования. Начиная со следующей статьи, мы займемся настоящим программированием и научимся использовать RxJava при разработке приложений для Android.

Итак, сначала давайте разберемся, с какой проблемой мы сталкиваемся? Зачем нам нужно реактивное программирование? Потому что, если нет проблемы, то и решение нам не нужно, верно ??

Зачем нам нужна асинхронная работа?

Ответ прост: мы хотим улучшить пользовательский опыт. Мы хотим сделать наше приложение более отзывчивым. Мы хотим обеспечить удобство работы наших пользователей, не останавливая основной поток, не замедляя их, и мы не хотим обеспечивать нашим пользователям высокую производительность.

Чтобы основной поток оставался свободным, нам нужно выполнять много тяжелой и трудоемкой работы, которую мы хотим выполнять в фоновом режиме. Мы также хотим выполнять тяжелую работу и сложные вычисления на наших серверах, поскольку мобильные устройства не очень мощные, чтобы выполнять эту тяжелую работу. Итак, нам нужна асинхронная работа для сетевых операций.

Матрица оценки:

Посмотрим, что нам нужно от библиотеки, которая обрабатывает всю асинхронную работу. Вы можете представить ниже 4 балла в качестве матрицы оценки для асинхронной библиотеки.

  • Явное выполнение: если мы начнем выполнение большого количества работы в новом потоке, мы сможем его контролировать. Если вы собираетесь выполнить какую-то фоновую задачу, вы собираете информацию и готовите ее. Как только вы будете готовы, вы можете приступить к фоновой задаче.
  • Простое управление потоками. В асинхронной работе ключевым моментом является управление потоками. Нам часто требуется обновить пользовательский интерфейс в основном потоке из фонового потока в середине или в конце задачи. Для этого нам нужно передать нашу работу из одного потока (фонового потока) в другой поток (здесь основной поток). Таким образом, вы должны иметь возможность легко переключать поток и передавать работу другому потоку, когда это необходимо.
  • Легко компонуем: в идеале было бы здорово, если бы мы могли создать асинхронную работу, и когда мы начинаем вращать фоновый поток, он просто выполняет свою работу, не зависящую от какого-либо другого потока (особенно потока пользовательского интерфейса), и остается независимым. из другого потока, пока он не закончит свою работу. Но в реальном мире нам нужно обновить пользовательский интерфейс, внести изменения в базу данных и многое другое, чтобы сделать потоки взаимозависимыми. Таким образом, асинхронная библиотека должна быть легко компонуемой и обеспечивать меньше места для ошибки.
  • Минимум побочных эффектов. При работе с несколькими потоками другой поток должен испытывать минимальные побочные эффекты от другого потока. Это делает ваш код легко читаемым и понятным для нового человека, а также упрощает отслеживание ошибок.

Что такое реактивное программирование?

Согласно Википедии:

Реактивное программирование - это парадигма программирования, ориентированная на потоки данных и распространение изменений. Это означает, что должна быть возможность легко выражать статические или динамические потоки данных на используемых языках программирования, и что лежащая в основе модель выполнения будет автоматически распространять изменения через поток данных.

Проще говоря, в Rx-программировании потоки данных, испускаемые одним компонентом, и базовая структура, предоставляемая библиотеками Rx, будут распространять эти изменения на другой компонент, который зарегистрирован для получения этих изменений данных. Короче говоря: Rx состоит из трех ключевых моментов.

ПРИЕМ = НАБЛЮДАЕМЫЙ + НАБЛЮДАТЕЛЬ + ПЛАНИРОВЩИКИ

Мы собираемся подробно обсудить эти моменты один за другим.

  • Наблюдаемый. Наблюдаемый - это не что иное, как потоки данных. Observable упаковывает данные, которые можно передавать из одного потока в другой. В основном они отправляют данные периодически или только один раз в течение своего жизненного цикла в зависимости от их конфигурации. Существуют различные операторы, которые могут помочь наблюдателю выдавать определенные данные на основе определенных событий, но мы рассмотрим их в следующих частях. На данный момент вы можете рассматривать наблюдаемые как поставщиков. Они обрабатывают и передают данные другим компонентам.
  • Наблюдатели. Наблюдатели потребляют поток данных, исходящий от наблюдаемого объекта. Наблюдатели подписываются на наблюдаемый объект, используя метод subscribeOn () для получения данных, испускаемых наблюдаемым объектом. Всякий раз, когда наблюдаемый излучает данные, весь зарегистрированный наблюдатель получает данные в обратном вызове onNext (). Здесь они могут выполнять различные операции, такие как анализ ответа JSON или обновление пользовательского интерфейса. Если из наблюдаемого возникла ошибка, наблюдатель получит ее в onError ().
  • Планировщики: помните, что Rx предназначен для асинхронного программирования, и нам нужно управление потоками. Вот тут-то на сцену выходит расписание. Планировщики - это компонент в Rx, который сообщает наблюдаемым и наблюдателям, в каком потоке они должны запускаться. Вы можете использовать метод detectOn (), чтобы сообщить наблюдателям, за каким потоком вы должны наблюдать. Кроме того, вы можете использовать scheduleOn (), чтобы указать наблюдаемому объекту, в каком потоке вам следует запустить. В RxJava предусмотрены основные потоки по умолчанию, например, Schedulers.newThread () создаст новый фон для этого. Schedulers.io () выполнит код в потоке ввода-вывода.

3 простых шага по использованию Rx в вашем приложении

Давайте посмотрим на основной пример. Это объяснит 3 простых шага по использованию реактивного программирования в вашем приложении.

Шаг 1. Создайте наблюдаемый объект, который передает данные:

Здесь база данных - это наблюдаемое, которое выдает данные. В нашем случае он испускает струны. just () - оператор. Что в основном передает данные, предоставленные в аргументе, один за другим. (Мы подробно рассмотрим операторы в наших следующих статьях. Так что не беспокойтесь о них.)

Шаг 2. Создайте наблюдателя, который потребляет данные:

В приведенном выше фрагменте кода наблюдатель - это наблюдатель, который потребляет данные, передаваемые наблюдаемым объектом базы данных. Он обрабатывает полученные данные, а также обрабатывает ошибки внутри них.

Шаг 3. Управление параллелизмом:

На последнем этапе мы определяем наши планировщики, которые управляют параллелизмом. subscribeOn (Schedulers.newThread ()) указывает наблюдаемой базе данных работать в фоновом потоке. detectOn (AndroidSchedulers.mainThread ()) указывает наблюдателю запускаться в основном потоке. Это базовый код для реактивного программирования.

Итак, теперь вы должны понять, зачем нам реактивное программирование, зачем они нужны и как мы можем их реализовать. В следующих статьях мы подробно узнаем, как использовать RxJava и его операторы.

Что дальше? (Часть 2)

Теперь посетите следующую часть, чтобы начать некоторый пример программирования на RxJava и то, как использовать RxJava в вашем проекте Android / Java.



Подпишитесь на меня в Medium или M y Blog, чтобы прочитать больше интересных статей о Rx . Если вам понравилась статья, нажмите 💚 ниже, чтобы ее увидело больше людей!