L'uso continuo della ViewBag
-
26-10-2019 - |
Domanda
Faccio uso pesante del ViewBag nella mia applicazione MVC, è questa pratica male considerato? Sono incerto se per trascorrere del tempo la creazione di ViewModels (però ho pensato che era più adatto a MVVM piuttosto che MVC) o continuare a utilizzare il ViewBag pesantemente. Quali sono gli argomenti a favore e contro questo? metodo di controllo esempio potrebbe restituirlo del modello (in genere una semplice entità del dominio), così come le seguenti chiamate al 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";
Soluzione
Domande come queste di solito ottenere risposte da entrambi i lati della barricata. Molte persone ritengono che l'utilizzo di ViewBag come questa è una cattiva progettazione (me compreso). Rende i controller meno verificabile. I suoi punti di vista non sono fortemente tipizzati, ecc.
Di solito è una buona pratica di utilizzare un ViewModel
. Invece di avere il vostro modello di essere un modello di dominio, creare un modello che è specifico per la vista che si sta visualizzando. In questo modo si può essere al 100% personalizzati su misura per ciò che è necessario per questa vista specifica. Troverete che non si ha realmente bisogno di usare ViewBag molto una volta che si esegue questa operazione. A volte può creare un sacco di codice aggiuntivo (una vista del modello per view), ma il codice è piuttosto semplice e fare una modifica a un punto di vista non si romperà tutti gli altri.
Altri suggerimenti
Perché non usare persona come modello? In questo modo è possibile utilizzare una vista fortemente tipizzato. La mia opinione personale è che il ViewBag è praticamente 'archi magici' e mentre funziona bene su piccola scala in cui sei l'unico dev, nelle applicazioni e progetti si sono praticamente costringendo tutti a ricordare ciò che tutte le stringhe magici sono più grandi. Inoltre, non si ottiene la sicurezza tipo che si sarebbe utilizzando un modello e una vista fortemente tipizzato.