Связь между представлениями в MVVM

Я новичок в компонентах архитектуры Android / MVVM и хотел бы знать, как лучше всего реализовать связь между представлениями.

Допустим, у меня есть классы A_View, A_View_Model, B_View и B_View_Model. Поскольку пользователь взаимодействует с A_View, мне нужно обновить B_View (например, отобразить новое изображение). Можно ли для A_View получить ссылку на B_View_Model и вызвать метод, который запускает LiveData, вызывая обновление B_View? Чтобы обобщить вопрос, можно ли для представления получить доступ к другим моделям представления для взаимодействия с другими представлениями?

В примере взаимодействия фрагментов Google для взаимодействия используется "обычная" модель представления. Это необходимо? Разве я не могу просто использовать ViewModel собственной ViewModel?

Также как вы справитесь, если хотите обновить несколько представлений. Вы создаете контроллер / презентатор, который ссылается на несколько моделей представления, и вызываете их соответственно?


person kotsen    schedule 11.10.2018    source источник
comment
Каждый раз, когда я изучаю новую архитектуру, платформу и т. Д., Я обычно должен напоминать себе, что если все, что у меня есть, это молоток, то все выглядит как гвоздь. При этом, если вы беспокоясь о соединении A с B или позже по линии с C, тогда вы всегда можете прервать канал связи между A и B, что-то вроде Pub / Sub. A публикует событие в канале связи, а B регистрируется как слушатель на канале. У канала может быть много издателей и много подписчиков.   -  person James Poag    schedule 11.10.2018


Ответы (1)


Если A и B являются братьями и сестрами, я ожидаю, что родитель предоставит модели представления для обоих и обработает любое взаимодействие между ними. Строго говоря, родительский элемент будет делать это через свой собственный viewModel, имеющий ссылки на каждую из дочерних viewModel.

Вы можете реализовать интерфейс в Parent_View_Model, который A_View_Model запускает, уведомляя родителя, чтобы повлиять на соответствующий ответ на B_View_Model.

Если B является подвидом A, тогда будет верен тот же шаблон, только A будет действовать как родитель.

person rhpekarek    schedule 11.10.2018