Tabla de contenidos
Model-View-ViewModel (MVVM) es una arquitectura o patrón de desarrollo de software. El objetivo principal es la separación estricta entre la interfaz gráfica de usuario, la lógica de presentación y la lógica empresarial.
MVVM es un patrón de arquitectura con el que se puede implementar una clara separación entre la lógica empresarial y la interfaz de usuario en proyectos complejos. En pocas palabras, debe tratar de separar claramente las diferentes funcionalidades al programar, que técnicamente pertenecen juntas, pero que están ubicadas en diferentes capas del programa.
La representación de datos en la superficie visible debe en consecuencia por ejemplo, estar separado de la lógica que regula el acceso a los datos de forma invisible en segundo plano. Desarrollado por Microsoft, MVVM es una variación del patrón Model View Controller (MVC) o Model View Presenter (MVP).
Separación funcional de acceso y visualización de datos.
El patrón establece que la lógica se descompone en tres componentes: Model, View y ViewModel.
Model (Modelo)
El modelo asume tareas relacionadas con la gestión de datos. Puede, por ejemplo, solicitar datos de una fuente de datos, abstraer datos en términos de la aplicación o validar datos. El modelo proporciona datos a la aplicación o acepta datos para transferirlos a otros servicios, como almacenar en una base de datos. Por lo general, las clases del modelo funcionan junto con otras tecnologías que manejan el acceso y el almacenamiento de datos, por ejemplo, servicios.
View (Vista)
La única tarea de la vista es la representación gráfica en la interfaz de usuario. Por lo tanto, representa información y es responsable de la apariencia de la interfaz de usuario. Para ello, utiliza la información que se prepara y se pone a disposición en el ViewModel. Sobre todo, el código fuente de la vista contiene las estructuras necesarias para mostrar la información deseada.
Es posible que la vista también contenga pequeñas secciones de código que afecten directamente la visualización de la información, porque el procesamiento puramente estructural no es suficiente para la representación deseada. Además, la vista puede comunicar cambios en el modelo de vista, cuando un usuario hace clic o escribe algo.
ViewModel (Modelo de vista)
Construye un puente entre el modelo y la vista. Aquí está la lógica que se necesita para la presentación de los datos en la superficie. La lógica escucha la entrada del usuario y puede ejecutar la lógica de presentación apropiada si es necesario. Solicita los datos que la vista necesita para mostrar o pasa información desde la interfaz al modelo, donde tiene lugar la lógica empresarial.
ViewModel también puede transmitir información nueva o modificada a View en tiempo de ejecución y, por lo tanto, garantizar que los datos mostrados estén siempre actualizados.
Beneficios de MVVM
Si se implementa correctamente, el patrón de arquitectura MVVM ofrece ciertas ventajas para el desarrollo de aplicaciones complejas.
Componentes intercambiables e independientes
View y ViewModel se pueden intercambiar o cambiar sin tocar el modelo. Las funciones básicas para el acceso a los datos permanecen intactas hasta que realmente tengas que intervenir específicamente en este punto. Esto es práctico porque el procesamiento y la visualización de la información se pueden optimizar o renovar por completo según se desee, mientras que la funcionalidad subyacente permanece sin cambios. Por el contrario, puedes trabajar en la lógica empresarial sin tener que cambiar necesariamente la interfaz.
También existe la opción de crear diferentes vistas para un ViewModel con poco esfuerzo, para realizar diferentes puntos de vista. En lugar de usar varias vistas y modelos de vista, solo se debe crear la visualización de la interfaz en diferentes variantes.
Comprobabilidad mejorada
Probar sistemas complejos como una unidad grande es complicado y poco confiable como método de prueba único. MVVM ya separa la lógica de la interfaz de usuario y la gestión de datos. Esto hace que sea mucho más fácil llevar a cabo pruebas más detalladas.
Puedes, por ejemplo, considerar ViewModel completamente separado de View y Model. No tienes que tratar de cubrir todos los escenarios en la superficie, pero puedes trabajar con pruebas unitarias claramente definidas en cada módulo. Con menos esfuerzo y sección por sección, se puede comprobar si todo funciona como se deseas desde el punto de vista técnico.
Trabajo en equipo simplificado
Dado que la interfaz y la lógica empresarial tienen lugar en módulos separados, los desarrolladores y diseñadores de UI pueden trabajar de forma independiente en el mismo componente si es necesario. Mientras el programador está ocupado con el modelo y el modelo de vista, el diseñador de la interfaz de usuario puede preparar la interfaz gráfica sin interrupciones. View y ViewModel se pueden conectar entre sí después de completarse.
Desventajas
Trabajar con MVVM es un poco más complicado, especialmente en el área de enlace de datos y comunicación entre los componentes. Además, MVVM solo funciona bien si la separación es realmente limpia y las cosas no terminan en el componente incorrecto por conveniencia, como por ejemplo, la lógica de presentación en la vista.