Задание: Прикладной программист. RxJava, реализация аналогичной RxJava-библиотеки (Дистанционная работа)
Основные требования
Вам необходимо реализовать собственную версию библиотеки RxJava, используя основные концепции реактивного программирования. Проект должен включать базовые компоненты реактивного потока, поддерживать асинхронное выполнение, обработку ошибок и предоставлять операторы преобразования данных.
Цель работы — создать систему реактивных потоков с возможностью управления потоками выполнения (Schedulers) и обработки событий с использованием паттерна «Наблюдатель» (Observer pattern).
Блоки заданий
1. Реализация базовых компонентов
Что нужно сделать:
Реализовать интерфейс Observer с методами:
onNext(T item) — получает элементы потока.
onError(Throwable t) — обрабатывает ошибки.
onComplete() — вызывается при завершении потока.
Реализовать класс Observable с поддержкой подписки (subscribe).
Реализовать статический метод create(), позволяющий создавать объекты Observable.
Ключевые моменты:
Соответствие реализации требованиям.
Работоспособность базовых компонентов.
Читаемость и структурированность кода.
2. Операторы преобразования данных
Что нужно сделать:
Реализовать оператор map(Function mapper), который преобразует поток данных.
Реализовать оператор filter(Predicate predicate), который отфильтровывает ненужные элементы.
Ключевые моменты:
Корректная работа операторов.
Наличие тестов и демонстрация функционала.
Читаемость кода.
3. Управление потоками выполнения
Что нужно сделать:
Реализовать интерфейс Scheduler с методом execute(Runnable task).
Создать три варианта Scheduler:
IOThreadScheduler (аналог Schedulers.io(), использующий CachedThreadPool).
ComputationScheduler (аналог Schedulers.computation(), использующий FixedThreadPool).
SingleThreadScheduler (аналог Schedulers.single(), использующий один поток).
Реализовать методы subscribeOn(Scheduler scheduler), чтобы подписка выполнялась в заданном потоке, и observeOn(Scheduler scheduler), чтобы обработка элементов происходила в нужном потоке.
Ключевые моменты:
Корректная реализация и работа интерфейса Scheduler.
Правильное функционирование методов subscribeOn() и observeOn().
Читаемость кода.
4. Дополнительные операторы и управление подписками
Что нужно сделать:
Реализовать оператор flatMap(Function> mapper), который преобразует элементы в новый Observable.
Реализовать интерфейс Disposable, позволяющий отменять подписку.
Добавить обработку ошибок с возможностью передачи их в метод onError().
Ключевые моменты:
Работоспособность оператора flatMap().
Реализация механизма отмены подписки через Disposable.
Корректность обработки ошибок.
5. Тестирование
Что нужно сделать:
Написать юнит-тесты для всех ключевых компонентов системы.
Проверить корректность обработки ошибок.
Проверить работу Schedulers в многопоточной среде.
Проверить работу операторов map, filter, flatMap.
Ключевые моменты:
Полное покрытие тестами основных сценариев.
Читаемость и структурированность тестов.
6. Отчет
Что нужно сделать:
Подробно описать архитектуру реализованной системы.
Разъяснить принципы работы Schedulers, их различия и области применения.
Описать процесс тестирования и основные сценарии.
Привести примеры использования реализованной библиотеки.
Ключевые моменты:
Четкое объяснение принципов работы Schedulers и их применения.
Полное описание архитектуры системы и реализованных операторов.
Обзор процесса тестирования.
Формат сдачи работы
В результате у вас должны получиться:
код реализации RxJava в соответствии с заданием;
отчет;
файл с Unit-тестами.