Я новичок в использовании MVVM и Android архитектуры, и я немного запутался.
скажем, например, я хочу создать приложение, подобное Youtube, так как вы знаете, что в нижней панели YouTube есть следующие вкладки: Главная, подписка, Тенденции (исследовать)
, на этих 3 вкладках будет отображаться recylerview элементов (видеообъект), эти 3 будут отображать данные из 3 разных запросов.
в MVVM с использованием viewmodel и livingata поток данных будет выглядеть следующим образом:
фрагмент <- viewModel <- хранилище <- client </p>
, поэтому для этих 3 вкладок У меня будет 3 разных фрагмента, и это также означает, что у меня будет 3 разных модели представления. теперь я не уверен, сколько репозиториев и сетевых клиентов мне нужно иметь
Прав ли я, если у меня есть только 1 репозиторий и 1 сетевой клиент? сколько репозиториев и клиентов мне нужно иметь?
каждый viewModel будет извлекать liveData из этого VideoRepository
кода ниже, и в конечном итоге каждый фрагмент будет наблюдать данные из каждой viewModel
object VideoRepository {
val homeVideos: LiveData<List<Video>> = VideoRetrofitClient.homeVideos
val subscriptionVideos: LiveData<List<Video>> = VideoRetrofitClient.subscriptionVideos
val trendingVideos: LiveData<List<Video>> = VideoRetrofitClient.trendingVideos
fun searchHomeVideos() {
VideoRetrofitClient.searchHomeVideos()
}
fun searchSubscriptionVideos() {
VideoRetrofitClient.searchHomeVideos()
}
fun searchTrendingVideos() {
VideoRetrofitClient.searchHomeVideos()
}
}
и VideoRepository
получит LiveData от этого VideoRetrofitClient
, как этот код
object VideoRetrofitClient {
val homeVideos = MutableLiveData<List<Video>>()
val subscriptionVideos = MutableLiveData<List<Video>>()
val trendingVideos = MutableLiveData<List<Video>>()
fun searchHomeVideos() {
// perform networking ....
homeVideos.postValue(videos)
}
fun searchSubscriptionVideos() {
// perform networking ....
subscriptionVideos.postValue(videos)
}
fun searchTrendingVideos() {
// perform networking ....
trendingVideos.postValue(videos)
}
}
java или kotlin в порядке