2011-11-30 3 views
6

Utilizzo intensivo di ViewBag nella mia applicazione MVC, è considerata una pratica errata? Non sono sicuro se dedicare tempo alla creazione di ViewModels (tuttavia ho pensato che fosse più adatto a MVVM piuttosto che a MVC) o continuare a utilizzare il ViewBag pesantemente. Quali sono gli argomenti a favore e contro questo? metodo di controllo esempio potrebbe tornare è il modello (in genere una semplice entità del dominio), così come le seguenti chiamate al ViewBag:Uso intenso di 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"; 

risposta

9

Domande come queste di solito ricevono risposte da entrambi i lati della barriera. Molte persone ritengono che l'uso di ViewBag come questo sia un cattivo design (me compreso). Rende i tuoi controller meno testabili. Le tue visualizzazioni non sono fortemente digitate, ecc.

Generalmente è buona norma utilizzare ViewModel. Invece di fare in modo che il modello sia un modello di dominio, creare un modello specifico per la vista che si sta visualizzando. In questo modo può essere personalizzato al 100% su misura per quello che ti serve per questa visualizzazione specifica. Scoprirai che non hai davvero bisogno di usare ViewBag molto una volta che lo fai. A volte può creare un sacco di codice aggiuntivo (un modello di visualizzazione per visualizzazione) ma il codice è piuttosto semplice e apportare una modifica a una vista non ne infrange altre.

+0

Grazie, questo era praticamente quello che stavo cercando. – Paul

+0

Ancora una volta, ricorda che domande come queste sono molto soggettive. Ciò che funziona per te potrebbe non funzionare per gli altri e ciò che funziona per gli altri potrebbe non funzionare per te. Sto solo rispondendo dal mio punto di vista :) – Dismissile

0

Perché non usare persona come il vostro modello? In questo modo puoi usare una vista fortemente tipizzata. La mia opinione personale è che ViewBag è praticamente "stringhe magiche" e mentre funziona bene su piccola scala dove sei l'unico dev, in applicazioni e progetti più grandi stai praticamente costringendo tutti a ricordare quali sono tutte le stringhe magiche. Inoltre, non si ottiene la sicurezza del tipo che si utilizza un modello e una vista fortemente tipizzata.