tutorial pages net mvc example cshtml asp asp.net-mvc asp.net-mvc-2 model viewmodel

asp.net-mvc - pages - razor vs mvc



Modelo ASP.NET MVC vs ViewModel (5)

En el más simple de los términos, me gusta pensar en lo siguiente:

Modelo: se ve y se siente estrictamente como su modelo de datos. Para todos los efectos, es solo una representación de clase de su modelo de datos. No tiene conocimiento de su Vista ni de ningún elemento dentro de su Vista. Dicho esto, no debe contener ningún decorador de atributos (es decir, Requerido, Longitud, etc.) que usaría para su Vista.

Modelo de vista: sirve como un enlace de datos entre su Vista y su Modelo y, en muchos casos, también es un envoltorio para su Modelo. Sería inútil sin la vista, por lo que normalmente no es reutilizable en múltiples vistas y controladores como lo es un modelo estándar.

Como ejemplo, su modelo puede tener las siguientes propiedades, que son representaciones directas de su fuente de datos:

public string FirstName { get; set; } public string LastName { get; set; }

Ahora, dado que su Modelo de Vista está vinculado a su Vista, puede tener la siguiente propiedad, que concatena el campo Nombre del Modelo y el campo Apellidos juntos como una cadena:

[Display(Name = "Customer Name")] public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }}

OK, he estado escuchando la discusión sobre "ViewModels" con respecto a ASP.NET MVC de MS.

Ahora, eso está destinado a ser un tipo específico de modelo, ¿correcto? No es un tipo específico de Vista.

A mi entender, es un tipo de modelo que tiene un propósito específico de interactuar con la vista? ¿O algo así?

Alguna aclaración sería apreciada.


Encontré este artículo como un recurso muy útil para entender cómo el "Modelo de dominio" y el "Modelo de vista" interactúan dentro de una aplicación MVC, particularmente en lo que respecta al enlace. Lo mejor de todo incluye ejemplos en lugar de descripciones abstractas.

"Desde que se lanzó MVC, he observado mucha confusión acerca de la mejor manera de construir modelos de visualización. A veces esta confusión no es sin razón, ya que no parece haber mucha información sobre recomendaciones de mejores prácticas. una solución de "talla única" que actúa como la bala de plata. En esta publicación, describiré algunos de los patrones principales que han surgido y los pros / contra de cada uno. Es importante tener en cuenta que muchos de estos patrones han surgido de personas que resuelven problemas del mundo real ".

http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx


Esencialmente modelo y modelo de vista son clases simples con atributos.

El objetivo principal de estas clases es describir (para "Modelar") un objeto para sus respectivas audiencias que son, respectivamente, el controlador y la vista.

Entonces tienes toda la razón cuando dices

A mi entender, es un tipo de modelo que tiene un propósito específico de interactuar con la vista

Por lo tanto, si bien las clases de modelo son efectivamente entidades de dominio con las que interactúa la aplicación, los modelos de vista son clases simples con las que interactúan sus vistas.

Espero eso ayude :)

Actualización :

Microsoft ha desarrollado una versión especializada del modelo de presentación de Martin fowler basada en gran medida en Model-View-Controller y lo ha llamado Model-View-ViewModel (MVVM) para la aplicación PF. Este patrón está dirigido a plataformas de desarrollo de IU modernas donde los desarrolladores de IU tienen diferentes requisitos basados ​​más en la lógica empresarial que los desarrolladores tradicionales. Mira here un poco de teoría


Existe la noción de un ViewModel, pero generalmente no está asociado con Asp.net MVC. MVC usa el patrón de Model View Controller, donde el controlador maneja las interacciones, construye datos del Modelo y luego los pasa a la Vista para su visualización.

ViewModels (y el patrón Model View View Model) generalmente se asocia con Silverlight y WPF. Xaml es un poco diferente en que las vistas pueden hacer un enlace bidireccional a los ViewModels, por lo que la tecnología es un poco diferente. Por ejemplo, si vincula un cuadro de texto a un campo, al escribir en ese cuadro de texto, el valor del campo se actualiza dinámicamente. Este tipo de interacción no es realmente posible en las páginas web ya que las páginas web son sin estado.

La similitud en los dos patrones es que ambos están tratando de separar la lógica de la pantalla. El uso / razón más común para esto es la prueba: desea poder realizar desde el código (a través de un marco de prueba) todas las interacciones que un usuario invocará a través de la interfaz de usuario.


WikiPedia tiene una descripción más completa de Model vs. ModelView que la que obtendrá en una respuesta SO: http://en.wikipedia.org/wiki/Model_View_ViewModel

Yo cito:

Modelo : como en el patrón MVC clásico, el modelo se refiere a (a) un modelo de objeto que representa el contenido de estado real (un enfoque orientado a objetos), o (b) la capa de acceso a datos que representa ese contenido (un dato enfoque céntrico).

Vista : como en el patrón MVC clásico, la vista se refiere a todos los elementos mostrados por la GUI, como botones, ventanas, gráficos y otros controles.

ViewModel : el ViewModel es un "Modelo de la Vista", lo que significa que es una abstracción de la Vista que también sirve para el enlace de datos entre la Vista y el Modelo. Se podría ver como un aspecto especializado de lo que sería un Controlador (en el patrón MVC) que actúa como un encuadernador / convertidor de datos que cambia la información del Modelo en información de Vista y pasa los comandos de la Vista al Modelo. ViewModel expone propiedades públicas, comandos y abstracciones. El ViewModel se ha comparado con un estado conceptual de los datos en oposición al estado real de los datos en el Modelo.