Шаблон репозитория в Android. Есть ли способ лучше этого? - PullRequest
2 голосов
/ 11 апреля 2019

У меня есть приложение на основе архитектуры MVVM. У меня есть два модуля, которые хранилище и источник данных. И используя сопрограммы. Я сталкивался с некоторыми проектами на Github, в которых они применяли разные способы

Моя реализация, как это;

You can think naming as login, profile etc. instead of X letter

интерфейс источника данных

interface IXDatasource{
   suspend fun fetchData(): LiveData<XResponse>
}

реализация источника данных

class XDatasourceImp  @Inject constructor(private val apiService: ApiService) : IXDatasource{
   suspend fun fetchData(): LiveData<XResponse> {
       // getting data
       return xResponse
   }
} 

интерфейс репозитория

 interface XRepository {
    suspend fun getXData(): LiveData<XResponse>
 }

Реализация репозитория

class XRepositoryImp @Inject constructor(private val iDatasource: IXDatasource): XRepository {
    override suspend fun getXData(): LiveData<XResponse> {
        return withContext(Dispatchers.IO) {
            iDatasource.fetchData()
        }
    }
}

Я назвал это в моей ViewModel

class XViewModel @Inject constructor(xRepository: XRepository) : BaseViewModel() {
    val xModel by lazyDeferred {
        xRepository.getXData()
    }
}

И я использую в своей деятельности / фрагмент

private fun init() = launch {
    val xModel = viewModel.xModel.await()
    xModel.observe(this@MyActivity, Observer {
        if (it == null) {
            return@Observer
        }
        // filling views or doing sth
   })
}

Это работает, но мне интересно, все они требуются или нет? Я могу применить базу данных комнаты к моему источнику данных. Есть ли способ лучше этого? Я знаю, что это может измениться в зависимости от приложения. Я пытаюсь найти лучший способ. Я буду рад, если вы что-нибудь предложите или расскажете о реализации шаблона репозитория.

...