Постоянство комнаты Android Studio - Должен ли каждый объект иметь отдельный DAO, и как это влияет на класс репозитория? - PullRequest
0 голосов
/ 24 февраля 2019

Если у меня есть база данных (DB), содержащая две таблицы / сущности (A и B), должен ли я создать DAO для каждой сущности?(Т.е. DAO_A и DAO_B), или я делаю DAO для всей БД, содержащей эти две таблицы?

Тогда, что касается хранилища, будет ли это хранилище для всей Базы данных (всей БД) или простохранилище для базы данных только с соответствующими DAO, для которых я хочу класс (т. е. DAO_A и DAO_B).(Действительно, я думаю, что я спрашиваю здесь, будет ли База данных иметь несколько репозиториев или только один репозиторий, и будет ли у каждого объекта свой собственный DAO, или я могу сделать общий D

1 Ответ

0 голосов
/ 24 февраля 2019

Я бы сказал, что для каждого объекта есть свой DAO. Почему? Потому что вы правильно их разделяете.

Допустим, у вас есть DAO, который содержит сущности A и B. В вашем хранилище вам может понадобиться только сущность A, тогда не будет никакого смысла в том, что этот DAO также использует сущность B.Если возникает случай, когда вам нужны оба объекта, просто используйте оба DAO.Еще одна причина для отдельных DAO заключается в том, что вы не знаете, как правильно связать сущности.Как вы решите, какие сущности объединить в DAO?Да, вы можете решить это в зависимости от репозитория, который его использует, но это может привести к дублированию кода (два DAO используют один и тот же объект, но каждый из них также использует второй объект, который отличается для каждого DAO).


Относительно вашего второго вопроса: я полагаю, что именно от вашей архитектуры зависит, как именно должен быть смоделирован ваш репозиторий.

Например, при использовании MVVM:

Требование: У вас есть действие, просто отображающее список изображений, извлеченных откуда-то.

Тогда ваша ViewModel будетпредложите функцию типа getAllImageModels или что-то подобное.Каждая из этих ImageModels будет включать изображение (которое будет отображаться).Внутри этой функции репозиторий называется либо вызовом API для получения списка изображений для загрузки, либо вызовом базы данных для получения списка из базы данных (в зависимости от интернет-соединения).Эти изображения также должны быть загружены.Снова изображения могут быть загружены из локального кэша или загружены через API.Затем ViewModel оборачивает их в желаемую модель, необходимую для View, и это все.

Как видно из этого простого примера, репозиторий сам по себе просто выполняет запросы.Либо для локальной файловой системы, базы данных или API.В нем могут быть такие функции, как getImageListFromDb и getImageListFromAPI.Так что классы, которые его используют, просто должны решить, когда что использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...