Room и единый источник правды
Вопрос
Расскажи, как ты работаешь с Room: от схемы до того, как данные попадают на экран.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Entity, DAO, Database; KSP; один экземпляр базы через DI
suspend и Flow вне главного потока
Flow из DAO как источник правды для UI
@Transaction для составных операций, @Relation для связей
Миграции явные или автомиграции, тесты миграций
Маппинг Entity в доменные модели в репозитории
Что могут спросить следом
- Как сделать пагинацию с Room?
- Как протестировать DAO?
- Как хранить список в колонке?
Разбор
Описываю таблицы как @Entity, запросы в @Dao, а базу как абстрактный @Database, код генерирует KSP. Базу создаю одну на приложение через Hilt. Методы DAO делаю suspend для разовых операций и Flow для наблюдения: Room сам выполняет их вне главного потока, а Flow переотправляет данные при каждом изменении таблиц. Этот Flow и есть источник правды для экрана: репозиторий мапит сущности в доменные модели, ViewModel превращает их в UiState через stateIn. Сеть только записывает свежие данные в базу. Составные операции, например «очистить и вставить», помечаю @Transaction, связи читаю через @Relation. При изменении схемы поднимаю версию и пишу миграцию или объявляю автомиграцию, схемы экспортирую в репозиторий и проверяю MigrationTestHelper. DAO тестирую на базе в памяти через Room.inMemoryDatabaseBuilder.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.