Что положить в вашу ViewModel - PullRequest
14 голосов
/ 09 февраля 2009

А что вы вкладываете в свое мнение?

Недавний блог от Скотт Хансельман об использовании специальной связующей модели для более простого тестирования заставил меня задуматься о следующем: Что вы вкладываете в логику своего контроллера при построении модели представления, и что следует помещать в представление? что он делает, это:

var viewModel = new DinnerFormViewModel {  
    Dinner = dinner,  
    Countries = new SelectList(PhoneValidator.Countries, dinner.Country)  
};  
return View(viewModel);

Теперь я использую тот же способ передачи данных в мое представление, но я не уверен, как он работает со свойством стран. Вы могли бы поспорить обе стороны: Обтекание списка стран в списке SelectList подготавливает данные для представления, так же, как вы создаете DTO модели представления для передачи ваших данных. С другой стороны, почему-то кажется, что вы специально манипулируете данными, которые будут использоваться в раскрывающемся списке, ограничивая то, как представление обрабатывает ваши данные из контроллера. Я чувствую, что это немного серая область на разделении проблем между представлением и контроллером, и я не могу действительно решить, какой путь пойти. Есть ли лучшие практики для этого?

PS: Для простоты давайте предположим контекст ASP.NET MVC по умолчанию, так что в основном ваш готовый проект. Движок по умолчанию и все такое прочее.

Ответы [ 2 ]

14 голосов
/ 09 февраля 2009

В MVC (по крайней мере, его разновидности) одной из обязанностей контроллера является подготовка данных для представления. Поэтому я думаю, что вполне приемлемо подготовить конкретную модель для потребления представлений, которая подразумевает, что она будет использоваться в раскрывающемся списке. В этом случае контроллер просто упрощает представление и фактически предотвращает появление неуклюжего кода в представлении. Он также не позволяет использовать эти магические строки во ViewData, такие как VieData ["Страны"].

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

7 голосов
/ 09 февраля 2009

Некоторые полагают, что идеально иметь одну всеобъемлющую модель вида для каждого вида (дублированную Принцип Громомия ).

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