Android中的存储库模式。有没有比这更好的方法了?

时间:2019-04-11 07:37:40

标签: android mvvm kotlin repository-pattern

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

它可以工作,但是我想所有这些都是必需的吗?我可以将会议室数据库应用于我的数据源。有什么办法比这更好的吗?我知道应用程序的情况可能会改变它。我试图找到最好的方法。如果您有任何建议或分享有关存储库模式实现的任何信息,我将感到高兴。

0 个答案:

没有答案