Интенсивное использование ViewBag - PullRequest
6 голосов
/ 30 ноября 2011

Я интенсивно использую ViewBag в своем приложении MVC, это считается плохой практикой?Я не уверен, стоит ли тратить время на создание ViewModels (однако я подумал, что это больше подходит для MVVM, а не MVC) или продолжать интенсивно использовать ViewBag.Каковы аргументы за и против этого?Пример метода контроллера возвращает его модель (как правило, простую сущность домена), а также следующие вызовы ViewBag:

            ViewBag.TotalItems = data.Count();
        ViewBag.FilteredItems = gridFilters;
        ViewBag.Action = "Events";
        ViewBag.Area = "People";
        ViewBag.EntityID = person.EntityID;
        ViewBag.OrganisationID = ID;
        ViewBag.Name = string.Format("{0} {1}", person.FirstName, person.LastName);
        ViewBag.IsEnabled = person.IsEnabled;
        ViewBag.EntityID = person.EntityID;
        ViewBag.Favourited = users.IsOnUserFavourites(person.EntityID);

        ViewBag.Columns = userColumns;

        ViewBag.Title = "Person : " + string.Format("{0} {1}", person.FirstName, person.LastName) + " - Events";

Ответы [ 2 ]

9 голосов
/ 30 ноября 2011

Подобные вопросы обычно получают ответы с обеих сторон забора.Многие люди считают, что использование ViewBag - это плохой дизайн (включая меня).Это делает ваши контроллеры менее тестируемыми.Ваши взгляды не сильно напечатаны и т. Д.

Обычно хорошей практикой является использование ViewModel.Вместо того, чтобы ваша модель была моделью предметной области, создайте модель, специфичную для отображаемого вами представления.Таким образом, он может быть на 100% адаптирован к тому, что вам нужно для этого конкретного представления.Вы обнаружите, что вам не нужно много использовать ViewBag, как только вы это сделаете.Иногда он может создать много дополнительного кода (одна модель представления на представление), но код довольно прост, и внесение изменений в одно представление не сломает другие.

0 голосов
/ 30 ноября 2011

Почему бы не использовать Person в качестве модели? Таким образом, вы можете использовать строго типизированное представление. Мое личное мнение таково, что ViewBag - это в значительной степени «волшебные строки», и хотя он хорошо работает в небольших масштабах, где вы являетесь единственным разработчиком, в больших приложениях и проектах вы в значительной степени заставляете всех помнить, что представляют собой все магические строки. Кроме того, вы не получаете безопасность типов, которую вы бы использовали при использовании модели и строго типизированного представления.

...