首页 > 解决方案 > Android 中的存储库模式。有没有比这更好的方法?

问题描述

我有一个基于 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
   })
}

它有效,但我想知道所有这些都是必需的吗?我可以将房间数据库应用到我的数据源。有没有比这更好的方法?我知道它可以根据应用程序的情况而改变。我试图找到最好的方法。如果您提出任何建议或分享有关存储库模式实现的任何内容,我会很高兴。

标签: androidmvvmkotlinrepository-pattern

解决方案


推荐阅读