Создание Room-хранилища
Сначала изучи существующие AppDatabase, DAO, entity, migrations и соглашения имён таблиц в
целевом проекте. Сохраняй их стиль и меняй только части схемы, нужные задаче.
Результат
- Создай по одному файлу на
Entityи Pojo-модель. - Создай или расширь один тематический
@Daoс нужнымиFlow- и suspend-операциями. - Зарегистрируй entity и DAO в
AppDatabase. - При любом изменении таблицы/entity увеличь
DATABASE_VERSIONи добавь migration, если проект не использует явно destructive/schema-managed стратегию. - Обнови schema fixtures/exported schema, если они отслеживаются проектом.
Инварианты
- Объявляй ключи в
@Entity(primaryKeys = [...]); не используй@PrimaryKeyна свойствах. - Располагай обычные
fun, включая методы сFlow, передsuspend fun. - Для flow без параметров предпочитай существующую в проекте форму
@get:Query val; для flow с параметрами используй функцию. - Добавляй
@Transactionметодам, возвращающим Pojo с отношениями. - Предоставляй nullable
selectи отдельныйselectNotNull, только когда оба контракта реально нужны вызывающему коду. - Не создавай DAO-метод, который императивно вызывает другие DAO-методы. Несколько записей собирай
через
AppDatabase.withTransactionв use case; один DAO-вызов транзакцией не оборачивай. - Выбирай
@Upsert,@Insert,@Updateили@Deleteпо требуемой конфликтной семантике, а не автоматически.
Проверь компиляцию Room/KSP целевого модуля и migration/schema-тесты, если они есть.