tag route net for data asp all asp.net-mvc separation-of-concerns

asp.net mvc - route - Qué poner en tu ViewModel



select asp-for asp-items (2)

¿Y qué pones en tu vista?

Un blog reciente de Scott Hanselman sobre el uso de un aglutinante modelo especial para pruebas más fáciles me llevó a pensar en lo siguiente: ¿qué pones en la lógica de tu controlador construyendo el modelo de vista y qué se debe poner en la vista? lo que él hace es esto:

var viewModel = new DinnerFormViewModel { Dinner = dinner, Countries = new SelectList(PhoneValidator.Countries, dinner.Country) }; return View(viewModel);

Ahora, utilizo la misma forma de pasar los datos a mi vista, pero no estoy seguro de cómo maneja la propiedad de los países. Podría argumentar en ambos lados: al empaquetar la lista de países en la Lista de selección se preparan los datos para la vista, al igual que se crea un DTO de modelo de vista para pasar sus datos. Por otro lado, de alguna manera se siente como si estuviera manipulando específicamente los datos que se utilizarán en una lista desplegable, lo que limita la forma en que la vista trata sus datos del controlador. Siento que esto es un poco un área gris en la separación de preocupaciones entre la vista y el controlador, y realmente no puedo decidir qué camino tomar. ¿Hay alguna mejor práctica para esto?

PD: Para simplificarlo, supongamos que el contexto MVC ASP.NET predeterminado, por lo tanto, básicamente su proyecto de fábrica. Motor de vista por defecto y todo ese jazz.


En MVC (al menos este sabor), una de las responsabilidades del controlador es preparar los datos para la vista. Por lo tanto, creo que es perfectamente aceptable preparar un modelo específico para el consumo de vistas que implique que se utilizará en un menú desplegable. En este caso, el controlador simplemente facilita la visualización y, de hecho, evita que el código incómodo se filtre en la vista. También evita que uno tenga esas cadenas mágicas en ViewData como VieData ["Countries"].

Entonces, para resumir, si bien puede parecer que hay un área gris en términos de responsabilidades, en última instancia ese es el trabajo del controlador: interactuar con la vista y transformar el modelo de dominio en otros modelos que sean más fáciles de consumir por el ver.


Algunos sugieren que tener un modelo de vista que lo abarque todo por vista es ideal (apodado Principio Thunderdome ).