Итак, я пишу это приложение с удаленным источником данных. И я хотел добавить возможности локального хранилища БД. Я настроил архитектуру, в которой у меня есть интерфейс DataSource
. Классы RemoteDataSource
и LocalDataSource
реализуют этот интерфейс. RemoteDataSource
вводится с модернизацией ApiInterface
, а LocalDataSource
вводится с DAO.
Теперь есть этот интерфейс репозитория и реализация SomeDataRepository
и SomeDataRepositoryImpl
. Если я хочу, чтобы репозиторий мог получать данные из api и сохранять их в базе данных, как мне это сделать?
В настоящее время я внедрил классы RemoteDataSource
и LocalDataSource
в SomeDataRepositoryImpl
для доступа к методам из разных источников данных. Таким образом я могу вызвать что-то вроде localDataSource.saveToDb()
и / или remoteDatSource.fetchSomeData()
int SomeRepositoryImpl
class. Но я не знаю, подходит ли передача конкретных реализаций классу.
Но если я передам, скажем, один DataSource
интерфейс для SomeDataRepository
, мне нужно будет определить saveToDb()
функцию в интерфейсе DataSource
, а затем мне придется реализовать это и в RemoteDataSource
, что не очень хорошо.
Может ли кто-нибудь рассказать мне, какой лучший подход к этому решению.
А также, пока я занимаюсь этим, стоит ли оборачивать данные с помощью класса оболочки LiveData
прямо в интерфейсе api для модернизации? потому что я не думаю, что когда метод вызывается в репозитории, я хотел бы наблюдать его прямо здесь, в репо, а затем получить доступ к данным, чтобы поместить их в локальную базу данных.