Bey*_*zid 5 android mvvm repository-pattern kotlin
我有一个基于 MVVM 架构的应用程序。我有两个模块,存储库和数据源。并使用协程。我在 Github 上遇到了一些项目,它们采用了不同的方式。
我的实现是这样的;
You can think naming as login, profile etc. instead of X letter
Run Code Online (Sandbox Code Playgroud)
数据源接口
interface IXDatasource{
suspend fun fetchData(): LiveData<XResponse>
}
Run Code Online (Sandbox Code Playgroud)
数据源实现
class XDatasourceImp @Inject constructor(private val apiService: ApiService) : IXDatasource{
suspend fun fetchData(): LiveData<XResponse> {
// getting data
return xResponse
}
}
Run Code Online (Sandbox Code Playgroud)
存储库接口
interface XRepository {
suspend fun getXData(): LiveData<XResponse>
}
Run Code Online (Sandbox Code Playgroud)
存储库实现
class XRepositoryImp @Inject constructor(private val iDatasource: IXDatasource): XRepository {
override suspend fun getXData(): LiveData<XResponse> {
return withContext(Dispatchers.IO) {
iDatasource.fetchData()
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的 ViewModel 中调用了这个
class XViewModel @Inject constructor(xRepository: XRepository) : BaseViewModel() {
val xModel by lazyDeferred {
xRepository.getXData()
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的活动/片段中使用
private fun init() = launch {
val xModel = viewModel.xModel.await()
xModel.observe(this@MyActivity, Observer {
if (it == null) {
return@Observer
}
// filling views or doing sth
})
}
Run Code Online (Sandbox Code Playgroud)
它有效,但我想知道是否需要所有这些?我可以将房间数据库应用到我的数据源。还有比这更好的方法吗?我知道它可以根据应用程序的情况而改变。我试图找到最好的方法。如果您就存储库模式实现提出任何建议或分享任何内容,我会很高兴。
| 归档时间: |
|
| 查看次数: |
1407 次 |
| 最近记录: |