2012-02-17 24 views
13

¿Estoy en lo cierto al pensar que es casi como un envoltorio para todos los objetos necesarios para una Vista?En MVC, ¿qué es un ViewModel?

Por ejemplo, supongamos que tiene una tienda en línea que vendió música y DVD. En su página de exploración, le gustaría mostrar una lista de todos sus DVD y música. ¿Construiría usted, por lo tanto, un objeto ViewModel que tenga dos propiedades que contengan una lista de álbumes y una lista de dvds?

Según mi entender, parece que tiene todas sus clases de modelo, es decir. una clase de Álbum/DVD, pero simplemente pasar estos solo no sería suficiente para su Vista. ¿Un ViewModel básicamente actúa como portador de todos los datos que su vista requiere?

+3

posible duplicado de [¿Qué es ViewModel en MVC?] (Http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) – HaveNoDisplayName

+0

@HaveNoDisplayName Desafortunadamente, esta pregunta es 4 meses mayor que la uno lo marcó como duplicado, el otro se ve mucho más que este. El título hace toda la diferencia que veo. –

+0

La otra pregunta tiene mejores respuestas, por lo que debe cerrarse como un duplicado, y no al revés. – Liam

Respuesta

13

Según su comprensión, la mayoría es correcta, pero no está completa.

El ViewModel también puede realizar conversiones desde el tipo de datos que su modelo lleva hasta el tipo de datos con los que su vista puede trabajar cómodamente; esto podría incluso significar que ViewModel no lleva modelos directamente sino otros buques que llevan (posiblemente un subconjunto de) la misma información en un formato más adecuado.

Considere que podría tener un modelo de biblioteca que agregue álbumes y DVD: la diferencia entre dicho modelo y el modelo de vista correspondiente es precisamente que al modelo no le importa (ni siquiera conoce) la vista mientras ViewModel tiene el expreso propósito de facilitarlo.

+1

Esta respuesta es solo parcialmente correcta y no muy explícita ("... ViewModel tiene el propósito expreso de facilitarlo" no explica nada). La respuesta de Deepakmahajan es más correcta aunque no muy profunda. Respondí una pregunta relacionada que ofrece más detalles: http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc/29135747#29135747 – Sam

+0

Los futuros lectores, sigan el enlace de Sam y echen un vistazo en la respuesta. Es muy útil de hecho. –

14

ViewModels le permite dar forma a múltiples entidades de uno o más modelos de datos o fuentes en un solo objeto, optimizado para el consumo y la representación por la vista.

El propósito de un ViewModel es que la vista tenga un único objeto para representar, aliviando la necesidad de código de lógica de UI en la vista que de otro modo sería necesaria. Esto significa que la única responsabilidad o preocupación de la vista es representar ese objeto único de ViewModel, lo que ayuda a una separación más clara de las preocupaciones (SoC). Las preocupaciones son aspectos distintos de la aplicación que tienen un propósito particular (es decir, preocupación), y mantener estos aspectos separados significa que su aplicación está más organizada y el código más enfocado. Al colocar el código de manipulación de datos en su propia ubicación lejos de la vista y el controlador, aplica SoC.

Cuestiones relacionadas