2009-02-08 15 views
14

¿Y qué pone en su vista?Qué poner en su ViewModel

Un reciente blog de Scott Hanselman sobre el uso de un aglomerante especial modelo para la prueba más fácil me llevó a pensar en lo siguiente: ¿Qué te pone en su lógica del controlador construir el modelo de vista, y lo que se debe poner en el punto de vista? lo que hace es la siguiente:

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

Ahora, yo uso la misma manera de pasar datos a mi modo de ver, pero estoy seguro acerca de cómo se enfrenta a la propiedad 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 modelo de vista DTO 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 este es un área un poco 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 que quede simple, supongamos que el contexto ASP.NET MVC predeterminado, por lo tanto, básicamente su proyecto de fábrica. Motor de vista por defecto y todo ese jazz.

Respuesta

13

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"].

En resumen, 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 son más fáciles consumir por la vista.

+0

Sí, creo que tienes razón. SI habría necesidad de otra representación de la lista de países en la vista, básicamente crearías otra vista DTO para eso, ¿no? –

+0

Probablemente. Aunque tal vez la lista de selección puede ser representada por una construcción de interfaz de usuario diferente, como tal vez una lista de casillas de verificación o algo así. Tal vez un método html helper diferente aún podría usar una SelectList y producir algo más. –

+0

+1 El uso de modelos de vista de esta forma elimina aún más la lógica de la vista, lo cual siempre es deseable. –

7

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

Cuestiones relacionadas