2011-11-30 15 views
6

Ciężko wykorzystuję ViewBag w mojej aplikacji MVC, czy jest to uważane za złą praktykę? Nie jestem pewien, czy poświęcić czas na tworzenie ViewModels (jednak myślałem, że był bardziej odpowiedni dla MVVM niż MVC) lub nadal intensywnie korzystać z ViewBag. Jakie są argumenty za i przeciw temu? Metoda przykład kontroler wróci to wzór (generalnie prosta jednostka domeny), a także następujące połączenia do ViewBag:Intensywne korzystanie z 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"; 

Odpowiedz

9

Tego typu pytania zwykle dają odpowiedzi z obu stron płotu. Wiele osób uważa, że ​​korzystanie z ViewBag w ten sposób jest kiepskim projektem (w tym mnie). To sprawia, że ​​twoje kontrolery są mniej testowalne. Twoje poglądy nie są silnie wpisane, itp.

Zazwyczaj dobrą praktyką jest używanie ViewModel. Zamiast modelu, który ma być modelem domeny, utwórz model, który jest specyficzny dla wyświetlanego widoku. W ten sposób może być w 100% dostosowany do tego, czego potrzebujesz do tego konkretnego widoku. Przekonasz się, że naprawdę nie musisz używać ViewBag dużo, gdy to zrobisz. Może czasami tworzyć wiele dodatkowych kodów (jeden model widoku na widok), ale kod jest dość prosty, a zmiana jednego widoku nie spowoduje przerwania innych.

+0

Dzięki, to było prawie to, czego szukałem. – Paul

+0

Ponownie, pamiętaj, że takie pytania są bardzo subiektywne. To, co działa dla ciebie, może nie działać dla innych, a to, co działa dla innych, może nie działać dla ciebie. Odpowiadam właśnie z własnego punktu widzenia :) – Dismissile

0

Dlaczego nie skorzystać osoby jako modelu? W ten sposób możesz użyć mocno wpisanego widoku. Moim osobistym zdaniem jest to, że ViewBag to w zasadzie "magiczne struny" i chociaż działa dobrze w małej skali, w której jesteś jedynym programistą, w większych aplikacjach i projektach prawie zmuszasz wszystkich do pamiętania, co to są wszystkie magiczne ciągi. Ponadto nie uzyskujesz bezpieczeństwa typu, który można by użyć modelu i mocno wpisanego widoku.