В чем разница между контроллером в MVC и ViewModel в MVVM?

21

Я не вижу разницы между MVC и MVVM ясно. Я чувствую, что команда в ViewModel похожа на метод действия в контроллере. И Controller, и ViewModel уведомят представление о необходимости обновить его после изменения состояния модели с помощью привязки данных. В чем главное отличие двух моделей?

TomCaps
источник

Ответы:

25

Контроллер и ViewModel отличаются по-разному.

В MVC Контроллер знает вид, он может изменить вид. Он также знает модель и может ее назвать. В MVVM ViewModel является абстрактным представлением View и не знает конкретного пользовательского интерфейса, он оборачивает модель таким образом, чтобы ее можно было отображать по желанию.

В классическом MVC контроллер - это просто стратегия представления для взаимодействия с моделью. На самом деле, иногда контроллер даже не нужен. В MVVM вам это не нужно, поскольку у вас могут быть разные ViewModel для одного и того же View, если вам нужно другое поведение. В MVC вы можете иметь, например, ReadOnlyController или AdminController для связи с моделью. В MVVM у вас может быть только две модели представления, и вы выбираете ту, которая вам нужна для просмотра.

Но у них есть некоторые сходства. В обоих шаблонах View является наблюдателем . В классическом MVC представление является наблюдателем модели, в MVVM - наблюдателем ViewModel.

Обе модели предназначены для обеспечения разделения интересов. MVVM в первую очередь стремится предоставить абстракцию View, полностью независимую от используемой технологии пользовательского интерфейса. MVC не заходит так далеко. Основное внимание уделяется разделению интересов, чтобы вы не помещали бизнес-логику (модель) в представление.

Вы также можете найти этот мой ответ на аналогичный вопрос полезным.

Наконец, я должен сказать, что оба образца принадлежат одной семье. MVP, из которых MVVM является потомком, является братом MVC. Если вы хотите узнать больше, перейдите по этой ссылке на сайт Мартина Фаулера , он объяснит все подробно.

сокол
источник
Не кажется ли вам, что эти модели-модели лучше всего понимают люди, которые их реализуют. Я считаю, что это вопрос выбора для разработчика. Один выбирает MVC или MVVM, в зависимости от того, хочет ли он полной абстракции о представлении с небольшими накладными расходами (в случае MVVM).
Панкадж Упадхяй
@Pankaj Upadhyay: какой из них вам следует использовать, зависит от ваших требований и выбора технологии, а также особенностей вашей платформы.
Сокол
Я считаю, что архитектура MVC достаточно хороша для всего, но это может быть потому, что я не столкнулся с проблемой, которая особенно требовала MVVM. ИМО, вам, безусловно, нужно иметь некоторый контроль над представлением, потому что его абсолютно свободная версия увеличит количество ошибок в будущих обновлениях
Pankaj Upadhyay
1
@Pankaj Upadhyay: Если вы хотите использовать одну и ту же логику для различных технологий пользовательского интерфейса, то MVP лучше. Я не думаю, что вам обязательно нужен некоторый контроль над представлением. Он может быть полностью независимым, и вы можете также протестировать ViewModels - если не лучше. Лучшее разделение также приносит пользу дизайнерам, поскольку работа над проектом может быть лучше разделена.
Сокол