Это нормально для представления, чтобы запросить данные из ViewModel в MVVM? - PullRequest
0 голосов
/ 15 мая 2018

Я читал о шаблоне MVVM.View должен наблюдать за изменениями в ViewModel и действовать соответствующим образом, но я запутался, если следующий код в View подходит для архитектуры MVVM.

fun onClick(view:View){
    showUser(viewModel.getUserDisplayName())
}

Здесь View нетНаблюдение за изменением, это скорее запрос последних данных от ViewModel.Это считается правильным в MVVM?

1 Ответ

0 голосов
/ 15 мая 2018

Это вопрос, на который, возможно, нет единого ответа, так как в зависимости от конкретного варианта использования могут быть сделаны разные замечания.Однако:

Сэр Codesalot (отличная ручка), на мой взгляд, технически верен.Позвольте мне уточнить.

В MVVM представление должно передавать события взаимодействия (команды) пользовательского интерфейса в ViewModel.Вот статья от Microsoft (которая изобрела mvvm): https://msdn.microsoft.com/en-us/library/ff798384.aspx Примеры здесь не связаны с Android, но концепции должны быть такими же, особенно если вы посмотрите на первую диаграмму.

ViewModel должна творить чудеса, реагировать на эти события, соответствующим образом манипулируя данными, а затем уведомлять наблюдателей (обычно представление) об изменениях состояния.Затем представление реагирует на изменения состояния.

Таким образом, если вы просто передадите данные обратно из ViewModel (синхронно), то в вашем представлении могут отсутствовать побочные эффекты.В вашем конкретном примере, вероятно, их нет, но учтите, что вызываемый вами метод не только возвращает данные, но и изменяет некоторое внутреннее состояние (например, подсчитывает количество обращений к данным).Тогда ваше представление не будет знать об этом.

Конечно, вы можете утверждать, что вы можете вернуть все соответствующие данные для представления, но оно начинает нарушать принцип единой ответственности.

Вот интересное сообщение в блоге, которое может дать лучший пример того, почему представление всегда должно получать состояние после ViewModel: https://medium.com/upday-devs/mvvm-rxjava-learnings-1819423f9592

В другом случае, статья в Википедии о MVVM https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel утверждает, что ViewModel может предоставлять открытые свойства.

Таким образом, в конечном итоге, скорее всего, будет чище, если вы не вернете данные напрямую.Тем не менее, вы являетесь архитектором, и вы знаете свое приложение лучше всего, и могут быть случаи, когда шаблоны могут быть нарушены.В конце концов они являются руководящими принципами.Если вы знаете, почему вы нарушаете это (и, возможно, документируете), тогда все должно сработать.

...