Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Таких введений полно, а отличие от титориалов, скажем, как сделать последовательность типа:
Ждем логина, ждем интернета, открываем базу, берем из базы список несинхронизированных данных, закачиваем их, закрываем базу.
Тонна подводных камней в стиле "если интернет моргнет 2 раза — мы загрузим несинхронизированные данные 2 раза?"
Или "как закрыть базу если от событий интернета у нас идет поток без onCompleted" и пр.
как сделать последовательность типа:
Ждем логина, ждем интернета, открываем базу, берем из базы список несинхронизированных данных, закачиваем их, закрываем базу.
логин это событие, статус интернета это вообще поток событий. Или вы все данные будете в одном потоке загружать?
Назовите пример "потока событий", а не обычного процесса.
Или вы все данные будете в одном потоке загружать?
Назовите пример «потока событий», а не обычного процесса.
Логин — не одиночная операция — любой запрос тебе может вернуть 403, и ты зарелогинишься, вызвав при этом какой-то навешенный на это флоу.
Вообще с точки зрения реактивщины — почти все — стримы, сиречь множественные операции — а что одиночные — в общем-то и не стоит отдельного эффорта.
Вообще из всех моих личных комплейнтов к реактивщине — она всегда читабельна.
А надо ли вызывать этот флоу, или он на самом деле актуален только для первого логина, а релогин — это совсем другое?
С точки зрения молотка все — гвозди. И да, так можно жить, но это не всегда удобно.
Хм, можете показать пример чистого Rx, описывающий «последовательность» из стартового коммента — мне интересно, насколько это будет читабельно.
я легко и бегло это читаю, потому что я привык
Нет, не надо — это разные задачи. Которые можно описать единообразно.
И тут имеет место tradeoff — консистентность против сиюминутной выгоды.
Могу предложить Вам презентацию оного, вроде как он затрагивает более злые примеры, чем в статье, возможно это поможет ответить на вопрос
А вы уверены, что речь идет о «против сиюминутной выгоды», а не «против семантической точности», скажем?
что правильно приготовленная реактивщина очень и очень семантически точна, но вопрос очень уместный — потому что правильно ее приготовить не очень просто
приемлемая цена за тестируемый код, с гарантированно меньшим количеством сайд-эффектов и высоким уровнем инкапсуляции
Так может быть, если есть более простые способы достигнуть семантической точности (я сейчас не буду обсуждать семантическую точность полученной реактивщины, ее надо почитать для этого на конкретных примерах), не надо усложнять?
я полагаю — что реактивный подход действительно хорошо справляется с задачей честного описания стейта сущности (включая транзитный) даже на уровне сигнатур.
в IT — где каждое решение — компромисс
Их странно сравнивать
больше тяготеют к потере контроля над качеством кодовой базы.
… а выше вы же писали, что чтобы реактивщина была семантически точной, ее нужно правильно готовить, что не очень просто.
На мой взгляд эти два подхода просто решают различные задачи
Большой профит RX — он очень хорошо тестируется.
Засчет биндинга — он очень хорошо покрывает задачи где данные собираются больше чем с одного источника (неважно — разные эндпоинты API, системные ресурсы, БДшечка) и претерпевают какие-то преобразования попути.
тестируется как и любой другой хороший фреймворк.
Хм, можете показать пример чистого Rx, описывающий «последовательность» из стартового коммента — мне интересно, насколько это будет читабельно.
Вот кстати можно написать) Как раз завтра делаю доклад на тему того, как весь набор действий приложения инициируемых какой-нибудь кнопкой может быть завернут в единый реактивный пайплайн. Могу предложить Вам презентацию оного, вроде как он затрагивает более злые примеры, чем в статье, возможно это поможет ответить на вопрос
Что мне вообще не нравится, но умишка сделать лучше нехватает
С точки зрения молотка все — гвозди. И да, так можно жить, но это не всегда удобно.
Введение в RxJava: Создание последовательности