ViewModel: MVC 2 против MVC 3 - PullRequest
0 голосов
/ 23 июня 2011

В моем текущем проекте MVC2 я реализую свой MVC, создав класс «модель», который собирает данные из базы данных и запускает их через бизнес-логику и т. Д. Затем у меня есть «Контроллер», который получает обработанные данные из модели иустанавливает значения в классе «ViewData».Этот класс «ViewData» является классом методов получения и установки.Затем эти ViewData передаются представлению в контроллере следующим образом: return View(myViewData);.Наконец, в представлении я добавляю данные, хранящиеся в ViewData, помещая эту строку вверху моего файла aspx.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Core.UI.Web.ViewData.MyViewData>" %>

Итак, так ли это MVC3?сделанный?У меня в команде разработчиков есть парень, который предлагает отправлять модель через контроллер прямо на вид, подобный следующему: return View(myModel);.Он полагает, что это MVC, а не MVVM.C.

Я понимаю, что ViewBag можно использовать, но это просто похоже на быстрый контейнер данных.

Итак, другими словами.ViewData или нет ViewData?

Спасибо,

Аарон

Ответы [ 3 ]

0 голосов
/ 23 июня 2011

В вашем случае ViewData - это просто модель - это ViewModel, она прекрасно работает, и на самом деле рекомендуемый подход в целом.Причина в том, что вы не хотите, например, первичный ключ из модели клиента, отображаемый в случае функции «создать клиента» - так как идентификатор клиента еще не существует.Однако для редактирования записи клиента вам, безусловно, нужен ключ.Так что - если вы используете viewmodels в некоторых случаях, а не в других, вы не противоречивы в своем проекте.

«Да», вы можете, но я предпочитаю последовательность, и использование модели представления дает вам последовательность.

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

0 голосов
/ 24 июня 2011

Как уже говорили другие, хотя вы можете получить, передав Модели своим представлениям, рано или поздно вы захотите добавить свойства только для целей отображения, которые не совсем относятся к модели (например, значения в зависимости от текущая сессия, а не сама модель.) Когда вы дойдете до этой точки, и обычно это довольно скоро, вы будете рады, что использовали viewModels.

Технически говоря, ASP.NET MVC даже не использует MVC, а Model2. У Дино Эспозито есть хорошая статья об этом . Более того, в своей книге Microsoft .NET: «Архитектура приложений для предприятия» он даже говорит:

"Это резкое и смелое утверждение, но мы должны сделать это: сегодня классический MVC ушел. Однако некоторые его вариации здоровы и процветают. Они являются Model2 для Интернета и MVP для Интернета и Windows. В свою очередь, и только недавно, MVP подверглась реконструкции. В июле 2006 года Мартин Фаулер предложил полностью отказаться от MVP и заменить его двумя вариантами: пассивным представлением (PV) и контролирующим контроллером (SVC). «

Я написал обзор этой главы в своем блоге .

0 голосов
/ 23 июня 2011

В некоторых ситуациях вам может потребоваться модель представления: объединять данные из нескольких моделей / источников или для конкретных сценариев проверки и т. Д., Но вполне приемлемо, чтобы ваше представление взяло модель без промежуточной модели представленияособенно если модель представления - это просто класс методов получения и установки без других функций.

Если вас не интересует представление методов / свойств из вашей доменной модели (или если это не применимо),Я бы просто передал модель прямо на контроллер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...