Visualizza i modelli Asp.Net MVC
-
22-07-2019 - |
Domanda
Quando si utilizza MVC e si convertono i dati in ViewModels, qual è il modo accettato per farlo?
Al momento sto usando AutoMapper per fare questo e funziona bene. Tuttavia ho visto in un articolo di blog (penso che fosse Rob C) avere un costruttore su ViewModel che prende il numero di parametri richiesti e quindi genera ViewModel
Ad esempio var RetViewModel = new ViewModel (MyObject);
Sembra un modo decente per farlo, pensieri?
Soluzione
Il modo "accettato" " è generalmente il modo migliore per te.
Non ho mai sentito parlare di AutoMapper e quando l'ho esaminato, quello che ho ottenuto è stato che crea una mappatura di oggetti magici seguendo una certa convenzione.
Screencast su: http://www.dnrtv.com/default.aspx? showNum = 155
Nota: ho visto solo circa metà di quello screencast, quindi i miei pensieri su AutoMapper sono alquanto incompleti.
Personalmente non voglio usarlo perché richiede che scrivo un codice extra per mappare / " flatten " tra le proprietà dell'oggetto (codice, IMO, meglio lasciato nella logica del costruttore). Nell'esempio di screencast, quel codice viene solitamente inserito nei metodi di azione di un controller che può portare a gonfiore (mi piacciono i controller / azioni scarni)
Uso il metodo che hai dato nel tuo post, facendo in modo che il costruttore del modello prenda un oggetto e faccia tutto il lavoro.
Inoltre, creo sempre un costruttore vuoto che non accetta parametri in modo da poter impostare manualmente i valori delle proprietà dell'oggetto ViewModel.
Esempio:
CustomViewModel myModle = new CustomViewModle
{
Property1 = "Something",
Property2 = 3,
//etc..
};
Per riassumere, prova in entrambi i modi e vedi cosa funziona per te. AutoMapper è un'ottima idea e posso vederlo aiutare in molte situazioni, tuttavia, penso che in alcuni punti quando lo usi scriverai tanto codice usando se dovessi usare i costruttori di oggetti.
Altri suggerimenti
Bene, il "quotato ufficialmente raccomandato" l'approccio è lasciare che il meccanismo di associazione del modello gestisca ciò per te. È più semplice e automatizza il processo. Il modello dovrà esporre le sue proprietà in lettura / scrittura affinché il raccoglitore sia in grado di inizializzarlo.
La seconda opzione di cui stai parlando probabilmente trarrà vantaggio dal rendere immutabili i tuoi modelli. Cioè, si rendono tutte le proprietà di sola lettura e si inizializzano una volta tramite i parametri del costruttore. Ciò richiederà di esaminare direttamente FormCollection per estrarre i valori inviati. Questo è più lavoro ma ha i suoi vantaggi come essere un tipo di programmazione difensiva.
Non posso dire in che modo sia meglio, entrambe sono opzioni. Personalmente preferisco il secondo stile per ora.