Paging3 - дар или проклятие?
Рано или поздно начинающий разработчик сталкивается с понятием «пагинация» – постраничная загрузка контента. Разумеется, он идёт искать существующие для этого решения, и неизбежно находит библиотеку Paging3.
Он думает:
«Ура! Эта штука решит проблему пагинации под ключ! На обучающих видео всё делается быстро, удобно и красиво! Документация понятная и с примерами! И это даже не внешняя библиотека, а из гугловского джетпака!».
Давайте обсудим, чем же закончится это приключение.
Поначалу вам понравится и всё покажется удобным. Потом столкнётесь с визуальным багом, и найдёте костыльное решение. Потом с ещё одним. Потом поймёте, что вы можете на 80% решить все свои задачи красиво, но для оставшихся 20% вам нужно вставить 20 отвратительных костылей. Потом, если вы уже умеете в Clean, обнаружите, что Paging3 расползся у вас по всем слоям, заставил вас отсылать ряд избыточных ивентов во вьюху, вынудил ввести костыльные флаги и заводить стейты там, где они быть не должны.
И в этот момент вы поймёте, что Paging3 вас победил, и условия давно диктует он. И придётся решать, стоит ли оно того.
На мой взгляд — нет, Paging3 не нужен. Задумка у него прекрасна, но исполнение оставляет желать лучшего. Ох не зря там основной класс до сих пор в экспериментальном статусе, лишний раз заставляя задуматься, а тащить ли такое в прод. Забавно, что их классы, методы, коллбэки и параметры выглядят в основном разумно, и кажется, что всё должно легко завестись, но в итоге каждый раз получается мешанина.
Кроме того, для начинающих я категорически советую сделать сначала пагинацию вручную через ScrollListener. С кэшированием и взаимодействием с сетью, с вьюмоделью, и желательно с чистой архитектурой. Увидеть, как оно всё работает, и какие есть проблемы. И только потом попробовать Paging3, чтобы сделать осознанный выбор: от него больше пользы или проблем.
Но ознакомиться с Paging3 я всё же советую, в некоторых компаниях его используют.
А был ли у вас опыт Paging3 в проде? Расскажите, очень любопытно.
#android #лайфхаки
Post #28
1.07K
- ❤ 3
- 🔥 3