Реализация ViewModel для всего приложения

#android-studio #kotlin #viewmodel

#android-studio #kotlin #viewmodel

Вопрос:

Я хочу создать ViewModel для всего приложения для отправки и получения данных между несколькими фрагментами и действиями. итак, как я могу это сделать

Комментарии:

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

2. Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы выделить именно то, что вам нужно. В том виде, в каком он сейчас написан, трудно точно сказать, о чем вы просите.

3. обычно мы используем viewmodel для использования базы данных room, поэтому мне нужно то же самое, но без базы данных; отправлять простые данные, не теряя их при любых изменениях конфигурации

Ответ №1:

Не внедряйте ViewModel, привязанный к приложению

Из статьи в Википедии:

Viewmodel MVVM — это преобразователь значений, то есть viewmodel отвечает за отображение (преобразование) объектов данных из модели таким образом, чтобы объектами можно было легко управлять и представлять. В этом отношении viewmodel является скорее моделью, чем представлением, и обрабатывает большую часть, если не всю логику отображения представления. Viewmodel может реализовать шаблон посредника, организуя доступ к внутренней логике вокруг набора вариантов использования, поддерживаемых представлением.

Из ViewModel документации класса:

ViewModel — это класс, который отвечает за подготовку и управление данными для действия или фрагмента. Он также обрабатывает связь Activity / Fragment с остальной частью приложения (например, вызов классов бизнес-логики).

ViewModel всегда создается в связи с областью действия (фрагментом или действием) и будет сохраняться до тех пор, пока область действия активна.

Единственная ответственность ViewModel заключается в управлении данными для пользовательского интерфейса.

Четко определено, что ViewModel является связующим звеном между View и Model и не более того. В настоящее время только Activity , Fragment и их подклассы реализуют ViewModelStoreOwner интерфейс, позволяющий ViewModel использовать их.

Также Application область ViewModel действия нарушает важный принцип SOLIDразделение интерфейса (ISP). В нем говорится следующее:

Провайдер разделяет очень большие интерфейсы на более мелкие и более конкретные, так что клиентам нужно будет знать только о методах, которые их интересуют. Такие сжатые интерфейсы также называются ролевыми интерфейсами. ISP предназначен для разделения системы и, следовательно, упрощения ее реорганизации, изменения и повторного развертывания.

Как отправлять и получать данные между действиями и фрагментами?

Некоторые способы общения проще, чем приложение ViewModel :