Поиск советов относительно MVVM в Android: я правильно понял? - PullRequest
0 голосов
/ 29 октября 2019

У меня есть несколько очень специфических вопросов, которые помогут мне понять MVVM. Спасибо, что нашли время и посмотрели на то, о чем я подумала.

В настоящее время я разрабатываю свое первое приложение с использованием компонентов архитектуры, и основной процесс выглядит следующим образом: у меня есть хранилище, извлекающее данные из YouTube-data-API (списки воспроизведения от пользователя и содержащие видео), когда приложение запускается в StartActivity и «хранит» данные в списке в Repository: (базовая иллюстрация ниже, а не фактический код, так как это может быть слишком много дляобъясните)

object Repository(){
    ...
    var playlists = mutableListOf<Playlist>()
    ...
}

И класс данных Playlist выглядит примерно так:

data class Playlist(id: String, description: String, uploadedOn: String, favourite: Boolean = false)

После того, как данные были успешно загружены, у меня есть MainViewModel и MainActivity для отображения всех результатов в RecyclerView, где ViewModel получает данные из репозитория при инициализации:

class MainViewModel: ViewModel(){
    init{
        updatePlaylists()
    }

    fun updatePlaylists(){
        playlistLiveData.value = Repository.playlists
    }
}

MainActivity, конечно, имеет Observer и отображает данные из MainViewModel в RecyclerView. Когда я нажимаю на элемент в этом RecyclerView, я вижу VideoDetailsActivity, который отображает данные для определенного видео и дает возможность установить флаг избранного. Флаг избранного является атрибутом, который автоматически обновляет данные Repository-Playlist-List по своим собственным VideoDetailsViewModel (неважно, просто обратите внимание, что данные репозитория здесь изменены). Теперь я возвращаюсь из этого действия обратно к * 1025. *, где отображаются все элементы, я вызываю метод из MainViewModel в onActivityResult(), который "обновляет" данные из Repository:

override fun onActivityResult(...){
    ...
    mainViewModel.updateFavorites()
    ...
}

Теперь мои вопросы:

1) Можно ли сделать Repository a Singleton и это хороший способ "сохранить" список в нем? (Данные загружаются из API при каждом запуске)

2) Когда я обновляю список с Repository в Activity, а затем возвращаюсь, например, к MainActivity, что является лучшим способом сказать MainViewModel что данные изменились? Мой подход в порядке? Что лучше использовать LiveData в Repository?

3) Могу ли я использовать ViewModels для "пустого" (без обзора) Activity (например, только ProgressBar), дляцель удаления как можно большего количества логического кода из самого Activity? Или это не достигло своей цели?

(при необходимости могу предоставить больше информации по любому вопросу)

...