Сколько LiveData мне нужно иметь в моей репозитой, если я получаю данные от 3-х разных API остальных? - PullRequest
0 голосов
/ 18 марта 2020

скажем, например, у меня есть ресторанный объект. У меня есть 3 различных действия

  1. одно действие, чтобы показать список лучших рекомендуемых ресторанов
  2. одно действие, чтобы показать список ресторанов с результатами поиска
  3. одно действие, чтобы показать список посещенные рестораны

, поэтому у меня есть 3 разные конечные точки от бэкэнда, которые я получу с помощью retroft. эти 3 конечные точки предоставят мне данные о ресторанах, одинаковые POJO

, поэтому для этих 3 видов деятельности мне нужно создать 3 разных модели просмотра, и у меня будет 1 репозиторий, верно? у меня вопрос, сколько LiveData мне нужно сделать, чтобы отправить данные в мою деятельность?

3 liveData в одном репозитории, подобном этому

class VideoRepository {

    val recommendedRestaurants: LiveData<List<Restaurant>> = ...
    val searchResultsRestaurants: LiveData<List<Restaurant>> = ...
    val visitedRestaurants: LiveData<List<Restaurant>> = ...

    fun getRecommendedRestaurant() {
        RestaurantRetrofitClient.getRecommendedRestaurant()
    }

    fun getRestaurantsUsingFilter() {
        RestaurantRetrofitClient.getRestaurantsUsingFilter()
    }

    fun getVisitedRestaurants() {
        RestaurantRetrofitClient.getVisitedRestaurants
    }

}

или только 1 LiveData в моем репозитории? поэтому каждый результат поиска будет возвращаться к действиям только через одну LiveData, такую ​​как

class VideoRepository {

        val restaurants: LiveData<List<Restaurant>> = ...

        fun getRecommendedRestaurant() {
            RestaurantRetrofitClient.getRecommendedRestaurant()
        }

        fun getRestaurantsUsingFilter() {
            RestaurantRetrofitClient.getRestaurantsUsingFilter()
        }

        fun getVisitedRestaurants() {
            RestaurantRetrofitClient.getVisitedRestaurants
        }

    }

1 Ответ

1 голос
/ 18 марта 2020

Лучшим решением может быть то, что вы можете создать три репо для трех экранов и разделить вызовы API.

Поскольку вам нужно создать три экземпляра репо для всей модели представления для трех экранов. Это увеличит объем памяти.

Если вы используете концепцию sharedViewModel, значит, вы можете go для опции А в своем коде. Поскольку sharedViewModel будет иметь только один экземпляр для трех экранов.

class VideoRepository {

    val recommendedRestaurants: LiveData<List<Restaurant>> = ...
    val searchResultsRestaurants: LiveData<List<Restaurant>> = ...    
    val visitedRestaurants: LiveData<List<Restaurant>> = ...

    fun getRecommendedRestaurant() {
        RestaurantRetrofitClient.getRecommendedRestaurant()
    }

    fun getRestaurantsUsingFilter() {
        RestaurantRetrofitClient.getRestaurantsUsingFilter()
    }

    fun getVisitedRestaurants() {
        RestaurantRetrofitClient.getVisitedRestaurants
    }

}

Если вы достаточно хорошо справляетесь с данными, используя liveData, вы можете go для опции B

 class VideoRepository {

    val restaurants: LiveData<List<Restaurant>> = ...

    fun getRecommendedRestaurant() {
        RestaurantRetrofitClient.getRecommendedRestaurant()
    }

    fun getRestaurantsUsingFilter() {
        RestaurantRetrofitClient.getRestaurantsUsingFilter()
    }

    fun getVisitedRestaurants() {
        RestaurantRetrofitClient.getVisitedRestaurants
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...