Что добавить в вашу ViewModel

И что вы вкладываете в свой просмотр?

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

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

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

PS: Чтобы это было просто, допустим контекст ASP.NET по умолчанию, поэтому в основном ваш проект из коробки. Двигатель просмотра по умолчанию и весь этот джаз.

Ответ 1

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

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

Ответ 2

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