协程和ViewModel分离关注点的最佳实践



我需要一些方向,能够在我的ViewModel类中观察一些流作为实时数据。

例如:ViewModel类下面有userDataFlow字段,它组合了几个数据流。我希望能够将该字段的工作提取到一个单独的类中,并让所有的内部工作都发生在那里,只是想观察ViewModel中字段的LiveData。我需要在ViewModel类的参数中传递一些东西,流需要这些东西才能工作。我不确定这是不是一个好的做法。基本上,让我的ViewModel观察结果并将其传递给视图。

val userDataFlow: Flow<List<UserData>> = 
combine(
familyChannel.asFlow(),
userRealTimeData.asFlow,  
).asLiveData()
}

听起来你需要一个UseCase/Interactor,在短时间内处理来自不同存储库的数据。

例如,假设您想要一个居住在COVID-19感染率高于某一值的国家的朋友列表:

class GetFriendsInDangerUseCase(
private val friendsRepository: FriendsRepository,
private val countryRepository: CountryRepository)
fun invoke(threshold: Float) = friendsRepository.friendsFlow
.combine(countryRepository.countriesFlow) { friends, countries ->
val dangerousCountries = countries.filter { it.infectionRate >= threshold }
friends.filter { it.country in dangerousCountries }
}

然后在虚拟机中这样使用:

val friendsInDangerFlow = getFriendsInDanger(0.5)

最新更新