Использование ViewModels и ссылки на System.Web.Mvc нарушают шаблон MVC? - PullRequest
6 голосов
/ 29 июля 2010

Я видел это повсюду в SO, блогах и книгах, где авторы говорят, что вы добавляете ViewModel, специфичные для вашего View, в ваши проекты Model как оболочки для ваших базовых объектов модели.Идея состоит в том, чтобы сделать его очень простым и целевым, когда вы собираетесь делать привязку модели к представлению.Вот хороший пример: Отображение и привязка раскрывающихся списков с использованием ASP.NET MVC 2 EditorFor

Однако меня немного раздражает, что сейчас есть ссылки на System.Web.Mvc вмоя модель, которую в противном случае можно было бы использовать для нескольких выходов (например, WCF API, Silverlight и т. д.), но теперь у меня есть конкретные ссылки на библиотеки MVC, которые потребуются для сборки проекта моей модели.

Myвопрос: нарушает ли это паттерны MVC, когда мы начинаем добавлять IEnumerable<SelectListItem> в наши классы моделей?И существует ли жизнеспособный альтернативный слой для перемещения и как, например, Контроллер?

Любые мысли или комментарии приветствуются.

Ответы [ 3 ]

6 голосов
/ 29 июля 2010

Лично я создаю список выбора на лету в представлении, из более многократно используемого списка IEnumerable в моей модели, что означает, что моя модель не имеет ничего общего с SelectLists, SelectListItems или чем-то специфичным для MVC.

Пример как обещано - создайте SelectList в представлении, используя все биты механизма обычного представления ...

<%= Html.ListBox("SelectedStuff", 
        new SelectList(Model.SomeOptions, "id", "name", Model.SelectedStuff)) %>
3 голосов
/ 29 июля 2010

нарушает ли это шаблоны MVC, когда мы начинаем добавлять IEnumerable в наши классы моделей?

Не совсем НО, если вы пытаетесь использовать дизайн, управляемый доменом, или разделение проблем между бизнес-уровнеми MVC / уровень представления, чем это нарушение.

  • Модели - это ваши сущности, ваш домен, объекты вашего бизнес-уровня.

  • ViewModels являютсяваши экраны, формы сообщений, отображения блоков данных.

Модели отображаются на ViewModels, которые могут содержать MVC-зависимые элементы.Подумайте, если это так, ViewModels непосредственно для MVC.Модели могут быть для службы, winform, WPF или любого программного представления системы бизнес-систем.

1 голос
/ 29 июля 2010

Нет, ViewModels предназначены для использования представлением и должны находиться в вашем веб-проекте. Однако ваша фактическая модель не должна иметь ссылки на MVC или ваш веб-проект. Думайте о своей ViewModel как о преодолении этого пробела в сети от вашей Модели к вашему View.

...