Какую роль играет MVVM в веб-приложениях ASP.NET MVC 4?

Пока я читаю книгу "ASP.NET MVC 4", мне интересно о MVVM. Я начал поиск в Google и не мог найти никаких книг о разработке веб-приложений с использованием MVVM, поэтому я должен упустить здесь немного информации.

Из того, что я понимаю, MVVM используется в веб-приложениях на стороне клиента через knockout.js и другие фреймворки. Если бы мне пришлось разрабатывать приложение Windows Phone, я мог бы использовать MVVM напрямую, не используя MVC. Означает ли это, что концепция привязки MVVM/данных просто не применяется к веб-приложениям клиент-сервер?

Ответ 1

MVVM - действительно своего рода подшаблон. Там нет действительно никаких "веб-приложений" MVVM. Все они MVC, и вы в значительной степени просто включаете модель представления, если хотите.

В ASP.NET MVC, в частности, вы просто создаете класс, как правило, с именем в форме [Model Name]ViewModel или [Model Name]VM. У этого класса будут только свойства вашей модели, с которыми вам нужно будет работать, и что-то дополнительное, что не имеет смысла накладывать на вашу реальную модель с поддержкой базы данных, например SelectList s и т.д.

В своем действии вы просто передаете экземпляр этой модели представления в свой вид вместо своей модели:

return View(viewModelInstance);

И, конечно же, убедитесь, что ваше мнение принимает следующее:

@model Namespace.To.MyViewModel

Единственная слегка сложная часть - это подключение модели представления к модели (т.е. получение данных в/из модели/модели представления. Вы можете сделать это вручную, явно отображая свойства, или вы можете использовать что-то вроде AutoMapper.

Ответ 2

MVVM является стандартным шаблоном проектирования для разработки WPF/Silverlight и не следует путать с MVC для разработки ASP.Net.

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

Из того, что я узнал о knockout.js, он был разработан для создания "привязок данных", аналогичных тому, что вы использовали бы в разработке WPF/Silverlight, поэтому там применяется шаблон проектирования MVVM.

Процитировать от другого ответ на вопрос о различиях между MVVM и MVC

В MVVM ваши классы кода (ViewModels) являются вашим приложением, а ваш Views - это просто удобный интерфейс, который находится поверх кода приложения и позволяет пользователям взаимодействовать с ним. Это означает, что ViewModels имеет огромную работу, потому что это ваше приложение и отвечает за все: от потока приложений до бизнес-логики.

С MVC ваше приложение Views - ваше приложение, а ваш Controller обрабатывает поток приложений. Логика приложения обычно находится в ViewModels, которые считаются частью M в MVC (sidenote: M в MVC нельзя считать тем же, что и M в MVVM, потому что уровень MVC M содержит больше функциональности, чем уровень MVVM M). Пользователю предоставляется экран (View), он взаимодействует с ним, а затем передает что-то в Controller, а Controller решает, кто что делает с данными и возвращает новый вид пользователю.

Ответ 3

MVC - это односторонняя система привязки данных.

Заполните свой M odel в C ontroller, затем передайте его V iew.


MVVM - это двухсторонняя привязка к данным.

Заполните свой M odel, используйте его в V iew, когда изменяется состояние V, ваше M одел обновление автоматически. (наоборот)