El modelo de vista de MVVM es un convertidor de valores, [1] lo que significa que es responsable de exponer (convertir) los objetos de datos del modelo de tal manera que se puedan administrar y presentar fácilmente. En este sentido, el modelo de vista es más un modelo que una vista , y maneja la mayor parte (si no toda) de la lógica de visualización de la vista. [1] El modelo de vista puede implementar un patrón mediador , organizando el acceso a la lógica del back-end en torno al conjunto de casos de uso admitidos por la vista.
El modelo se refiere a un modelo de dominio , que representa el contenido del estado real (un enfoque orientado a objetos), o a la capa de acceso a datos , que representa el contenido (un enfoque centrado en los datos). [ cita requerida ]
Vista
Al igual que en los patrones modelo-vista-controlador (MVC) y modelo-vista-presentador (MVP), la vista es la estructura, el diseño y la apariencia de lo que un usuario ve en la pantalla. [7] Muestra una representación del modelo y recibe la interacción del usuario con la vista (clics del mouse, entrada del teclado, gestos de toque de pantalla, etc.), y reenvía el manejo de estos al modelo de vista a través del enlace de datos (propiedades, devoluciones de llamadas de eventos, etc.) que se define para vincular la vista y el modelo de vista.
Ver modelo
El modelo de vista es una abstracción de la vista que expone propiedades y comandos públicos. En lugar del controlador del patrón MVC o del presentador del patrón MVP, MVVM tiene un enlazador , que automatiza la comunicación entre la vista y sus propiedades enlazadas en el modelo de vista. El modelo de vista se ha descrito como un estado de los datos en el modelo. [8]
La principal diferencia entre el modelo de vista y el presentador en el patrón MVP es que el presentador tiene una referencia a una vista, mientras que el modelo de vista no la tiene. En cambio, una vista se vincula directamente a las propiedades del modelo de vista para enviar y recibir actualizaciones. Para funcionar de manera eficiente, esto requiere una tecnología de vinculación o la generación de código repetitivo para realizar la vinculación. [7]
Los datos declarativos y la vinculación de comandos están implícitos en el patrón MVVM. En la pila de soluciones de Microsoft , el enlazador es un lenguaje de marcado llamado XAML . [10] El enlazador libera al desarrollador de estar obligado a escribir lógica repetitiva para sincronizar el modelo de vista y la vista. Cuando se implementa fuera de la pila de Microsoft, la presencia de una tecnología de vinculación de datos declarativa es lo que hace posible este patrón, [5] [11] y sin un enlazador, uno normalmente usaría MVP o MVC en su lugar y tendría que escribir más código repetitivo (o generarlo con alguna otra herramienta).
Razón fundamental
MVVM fue diseñado para eliminar virtualmente todo el código GUI (" código subyacente ") de la capa de vista, mediante el uso de funciones de enlace de datos en WPF (Windows Presentation Foundation) para facilitar mejor la separación del desarrollo de la capa de vista del resto del patrón. [3] En lugar de requerir que los desarrolladores de experiencia de usuario (UX) escriban código GUI, pueden usar el lenguaje de marcado del marco (por ejemplo, XAML ) y crear enlaces de datos al modelo de vista, que es escrito y mantenido por los desarrolladores de aplicaciones. La separación de roles permite a los diseñadores interactivos centrarse en las necesidades de UX en lugar de programar la lógica empresarial. De este modo, las capas de una aplicación se pueden desarrollar en múltiples flujos de trabajo para una mayor productividad. Incluso cuando un solo desarrollador trabaja en toda la base de código, una separación adecuada de la vista del modelo es más productiva, ya que la interfaz de usuario generalmente cambia con frecuencia y tarde en el ciclo de desarrollo en función de los comentarios del usuario final. [ cita requerida ]
El patrón MVVM intenta obtener las ventajas de la separación del desarrollo funcional que ofrece MVC, al tiempo que aprovecha las ventajas de los enlaces de datos y del marco de trabajo mediante la vinculación de datos lo más cerca posible del modelo de aplicación puro. [3] [4] [12] [ aclaración necesaria ] Utiliza el enlazador, el modelo de vista y las características de verificación de datos de cualquier capa empresarial para validar los datos entrantes. El resultado es que el modelo y el marco de trabajo controlan la mayor cantidad posible de operaciones, eliminando o minimizando la lógica de la aplicación que manipula directamente la vista (por ejemplo, el código subyacente).
Crítica
John Gossman ha criticado el patrón MVVM y su aplicación en usos específicos, afirmando que MVVM puede ser "excesivo" a la hora de crear interfaces de usuario sencillas. Para aplicaciones más grandes, cree que generalizar el modelo de vista por adelantado puede ser difícil y que la vinculación de datos a gran escala puede conducir a un menor rendimiento. [13]
^ ab Smith, Josh; et al. "Pensamiento: MVVM elimina el 99 % de la necesidad de ValueConverters". Grupos de Google .
^ Martin Fowler (19 de julio de 2004). "El patrón de diseño del modelo de presentación". Martin Fowler.com.
^ abcdef Smith, Josh (febrero de 2009). "Aplicaciones WPF con el patrón de diseño Modelo-Vista-Vista-Modelo". Revista MSDN .
^ ab Gossman, John (8 de octubre de 2005). "Cuentos del cliente inteligente: Introducción al patrón Modelo/Vista/VistaModelo para crear aplicaciones WPF".
^ ab Massey, Simon (9 de abril de 2011). "Patrones de presentación en ZK" . Consultado el 24 de marzo de 2012 .
^ Steve Sanderson. "KnockoutJS".
^ ab "El patrón MVVM". msdn.microsoft.com . 4 de octubre de 2012 . Consultado el 29 de agosto de 2016 .
^ Pete Weissbrod. "Patrón Modelo–Vista–VistaModelo para WPF: otro enfoque más". Archivado desde el original el 1 de febrero de 2008.
^ Microsoft (3 de abril de 2024). "Tutorial: creación de una API web con ASP.NET Core".
^ Wildermuth, Shawn (11 de mayo de 2010). "Enlace de datos de Windows Presentation Foundation: Parte 1". Microsoft . Consultado el 24 de marzo de 2012 .
^ "ZK MVVM". Potix . Consultado el 24 de marzo de 2012 .
^ Karl Shifflett. "Aprendizaje de WPF MV-VM". Archivado desde el original el 13 de abril de 2009. Consultado el 5 de junio de 2009 .
^ Gossman, John (4 de marzo de 2006). "Historias del Smart Client: ventajas y desventajas de MV-VM". Desafío de habilidades de IA .