630просмотров
16.0%от подписчиков
4 марта 2026 г.
question📷 ФотоScore: 693
📶 Что видит пользователь, когда заходит в лифт? (Или почему ваш лоадер всех бесит) Представьте: пользователь едет в метро. Интернет то появляется, то пропадает. Он открывает ваше приложение, чтобы почитать ленту. ❌ Подход Джуна (Прямая труба):
Запрос в сеть -> Показ лоадера на весь экран -> Ошибка тайм-аута -> Пустой белый экран.
А если пользователь случайно повернет телефон (сменит ориентацию) - лоадер появится снова, потому что Activity пересоздалась и запрос полетел заново. Это боль. ✅ Подход Мидла (Single Source of Truth - SSOT):
Открыл приложение -> Мгновенно увидел вчерашние данные из кэша -> В фоне пошел незаметный запрос в сеть -> Лента плавно обновилась свежими данными. Как это работает (Паттерн SSOT):
Запомните золотое правило: UI никогда не должен получать данные напрямую из сети! Единственным источником «правды» для экрана должна быть ваша локальная База Данных (БД). 1. Ваш ViewModel / Presenter просто подписывается на изменения в БД.
2. Когда нужно обновить данные, Repository идет в сеть.
3. Скачанные из сети данные сохраняются в Базу Данных.
4. База данных отправляет сигнал в UI: "Эй, у меня новые данные, перерисуйся!". 🛠 Чем пользуются профи: 🤖 Android:
Связка Room + Flow (или LiveData).
Вы пишете в DAO: fun getNews(): Flow<List<News>>. UI начинает слушать этот Flow. Как только метод из сети сделает insert(newItems) в базу, Room сам протолкнет новые данные в Flow, и UI обновится. Магия! 🍏 iOS:
Современный SwiftData (или старая добрая CoreData) + макрос @Query (в SwiftUI) или Combine.
Принцип тот же: UI биндится к хранилищу. Вы просто обновляете контекст базы, а списки на экране разъезжаются и анимируются сами. 💡 Совет:
Такой подход не только спасает от отсутствия интернета, но и решает проблему пагинации, поиска и шаринга данных между разными экранами (ведь все они смотрят в одну базу). #architecture #offlinefirst #ssot #android #ios #middle #caching 👉 @developer_mobila