E cosa inserisci nella visualizzazione?Cosa inserire nel ViewModel
Un recente blog da Scott Hanselman sull'utilizzo di uno speciale legante modello per la prova più facile mi ha portato a riflettere su quanto segue: Cosa hai messo nel tuo Logic Controller costruzione del modello di vista, e ciò che dovrebbe essere messo nella vista? quello che fa è questo:
var viewModel = new DinnerFormViewModel {
Dinner = dinner,
Countries = new SelectList(PhoneValidator.Countries, dinner.Country)
};
return View(viewModel);
Ora, io uso lo stesso modo di passare i dati al mio punto di vista, ma non sono sicuro di come si occupa con la proprietà Paesi. Si potrebbe discutere su entrambi i lati: L'elenco dei paesi nell'elenco SelectList prepara i dati per la vista, proprio come se si crea un DTO viewmodel per passare i dati. D'altra parte, in qualche modo sembra che tu stia manipolando in modo specifico i dati da utilizzare in un elenco a discesa, limitando il modo in cui la vista gestisce i dati dal controller. Ritengo che questa sia un'area un po 'grigia sulla separazione delle preoccupazioni tra la vista e il controller, e non posso davvero decidere quale strada seguire. Ci sono delle buone pratiche per questo?
PS: Per semplificare, assumiamo il contesto ASP.NET MVC predefinito, quindi in pratica il tuo progetto pronto per l'uso. Motore di visualizzazione predefinito e tutto quel jazz.
sì, penso che tu abbia ragione. Se ci fosse bisogno di un'altra rappresentazione della lista dei paesi nella vista, in pratica creeresti un'altra vista DTO per quello, giusto? –
Probabilmente. Anche se forse la SelectList può essere rappresentata da un costrutto UI diverso come forse un elenco di caselle di controllo o qualcosa del genere. Forse un diverso metodo helper html potrebbe ancora usare una SelectList e produrre qualcos'altro. –
+1 L'uso dei modelli di visualizzazione in questo modo rimuove ancora di più la logica dalla vista, che è sempre auspicabile. –