Ответ вслух Middle Room и хранение данных спрашивают часто обновлено

Room и единый источник правды

Вопрос

Расскажи, как ты работаешь с Room: от схемы до того, как данные попадают на экран.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Описываю таблицы как @Entity, запросы в @Dao, а базу как абстрактный @Database, код генерирует KSP. Базу создаю одну на приложение через Hilt.

Что должно прозвучать в ответе

  • 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 ошибок.