Передовые методы работы с моделью просмотра ASP.NET MVC

Сначала я хочу поделиться с вами этой очень интересной статьей о ViewModel: http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applications

У меня есть один вопрос
Является ли хорошей практикой, чтобы все классы ViewModel были производными от базового класса ex: BaseViewModel, поскольку большинство веб-сайтов / веб-приложений имеют общую информацию для отображения, как правило, на главной странице? В ASP.NET MVC, который отлично работает, модель макета (главной страницы) - это BaseViewModel, и каждое View имеет другую ViewModel.

Также приветствуются любые примеры использования интерфейсов ViewModel.

Спасибо. Риад


person riadh gomri    schedule 24.12.2012    source источник


Ответы (1)


Является ли хорошей практикой, что все классы ViewModel являются производными от базового класса?

Хотя в некоторых случаях это может быть правдой, это не то, что можно обобщить для всех приложений ASP.NET MVC. Есть также другие способы отображения общей информации во всех представлениях ASP.NET MVC, например, с помощью _ 1_.

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

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

person Darin Dimitrov    schedule 24.12.2012
comment
Спасибо за быстрый ответ, как всегда в нашей работе, я согласен с вами, что нет хорошей практики, которая работает для всех проектов. Дочерние действия - хорошая альтернатива, но предположим, я хочу получить доступ в контроллере (или службе) к информации, полученной из дочерних действий? Например, информация о пользователе. Мне нужно продублировать код или дважды вызвать его в службе, чтобы получить информацию, которая мне нужна, и обновить представление в зависимости от этой информации и один раз в дочернем действии, которое будет отображать информацию для пользователей. Любые примеры в шаблоне IViewModel? как с его помощью показывать разные представления и DI? - person riadh gomri; 24.12.2012
comment
Пример, который вы предоставили с UserInfos, должен управляться вашим поставщиком услуг членства. Если вы хотите получить доступ к информации о пользователе в вашем контроллере, вы просто запрашиваете у своего поставщика членства эту информацию для текущего аутентифицированного пользователя. Что касается вашего второго вопроса о шаблоне IViewModel, я не совсем уверен и не понимаю, о чем вы спрашиваете. Что касается различных представлений, вы можете использовать настраиваемые шаблоны редактора / отображения, которые на основе точного типа вашей модели представления будут автоматически отображать соответствующий шаблон. - person Darin Dimitrov; 24.12.2012
comment
Базовый класс контроллера - лучшее место для замены свойства User (с использованием ключевого слова new) для возврата настраиваемого IPrincipal. Затем контроллер может заполнить модель представления любыми необходимыми пользовательскими данными. Вы также можете сделать это для представлений на базовой странице. - person Jamie Ide; 24.12.2012