• Как выполнить DI для application context?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Он же тебе пишет, что цикл в графе.
    Provides
    fun provideApplicationContext(applicationContext: Context): Context

    Вот ты этим чего хочешь добиться? Ты в метод хочешь получить контекст из графа, и отдать в граф хочешь контекст. Это зачем?
    Этот метод вообще лишний, ты же сделал
    BindsInstance, контекст после этого уже в графе.

    И зачем у тебя апп компонент инжектит фрагмент и активити? У каждого из них должен быть свой компонент, Subcomponent апп компонента. Иначе получится просто свалка. И в любом случае случится ситуация, когда тебе в графе понадобится что-то, чего нет и не может быть в аппликейшн.
    Ответ написан
    Комментировать
  • Как добавить логику парсинга Json, не используя десериализатор?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Да, есть. не надо держать в данных отформатированные поля. Форматировать надо непосредственно перед использованием(например показе во вьюхе). Для этого должен быть отдельный слой, который занимается форматированием всех данных для показа(и это может быть не только форматирование текста).
    Ответ написан
    2 комментария
  • RxJava в 2021. Нужен ли?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    RxJava и корутины немного про разное. Rx это про stateless и представление всего в виде стримов иммутабельных стейтов(данных). Корутины это про stateful и про управление множеством асинхронных сущностей.
    Так сложилось, что в нашем многопоточном мире в обоих подходах есть concurrency. Но это не значит, что надо брать и противопоставлять Rx корутинам.
    Запрос на Rx настолько велик, что в kotlinx завезли flow - это тот же самый реактивный подход, только на основе корутин. С чем боролись, против чего проповедовал Елизаров, на то и напоролись, и ещё наплодили новых операторов, которые тоже надо знать. И усложнили всё чрезвычайно.
    flowOf(123)
       .map(::calculateSomething)
       .filter(::myFilter)
       .collect(::collectIt)

    Сколько в этом коде Асинхронных запросов? В каком месте оно может уснуть навечно? Неизвестно... фреймворк позволяет легко написать код так, что всё взорвется, а ты и не заметишь.
    Хорошо ли то, что с использованием корутин можно писать асинхронный код, по виду идентичный синхронному? Моё мнение - нет, не хорошо, потому что держать в голове две парадигмы про один код - это сложно. А если кто юзал корутины с многопоточностью под iOS(Kotlin/Native), там надо держать в голове три парадигмы про одинаковый код. Это плохо.

    На Rx написано много кода, многим людям без него жить сложно. Многие задачи на Rx решаются настолько проще, что реально думаешь, что без него никак.

    Если тебе корутины или Rx нужны, чтобы в сеть сходить на бекграунде, и потом данные показать в UI - тебе ни корутины, ни Rx особо не нужны.
    Ответ написан
    2 комментария