Compartir a través de


Enlace de datos de Windows y MVVM

Model-View-ViewModel (MVVM) es un patrón de diseño arquitectónico de la interfaz de usuario que desacopla la interfaz de usuario y el código que no es de interfaz de usuario. Obtenga información sobre cómo MVVM permite el acoplamiento flexible mediante el enlace de datos en XAML para sincronizar la interfaz de usuario y los datos, lo que mejora la capacidad de mantenimiento y reduce las dependencias.

Dado que proporciona acoplamiento flexible, el uso del enlace de datos reduce las dependencias duras entre diferentes tipos de código. Este enfoque facilita el cambio de unidades de código individuales (métodos, clases, controles, etc.) sin causar efectos secundarios no deseados en otras unidades. Este desacoplamiento es un ejemplo de la separación de preocupaciones, que es un concepto importante en muchos patrones de diseño.

Ventajas de MVVM

La desacoplación del código tiene muchas ventajas, entre las que se incluyen:

  • Habilitación de un estilo de codificación iterativo y exploratorio. El cambio aislado es menos arriesgado y es más fácil de experimentar con.
  • Simplificación de las pruebas unitarias. Puede probar unidades de código aisladas entre sí de forma individual y fuera de los entornos de producción.
  • Apoyando la colaboración en equipo. Los equipos o individuos independientes pueden desarrollar código desacoplado que se adhiere a interfaces bien diseñadas e integrarlo más adelante.
  • Mejora del mantenimiento. Corregir errores en código desacoplado es menos probable que provoque regresiones en otro código.

A diferencia de MVVM, una aplicación con una estructura de "código subyacente" más convencional suele usar el enlace de datos para los datos de solo visualización. Responde a la entrada del usuario controlando directamente los eventos expuestos por los controles. Los controladores de eventos se implementan en archivos de código subyacente (como MainWindow.xaml.cs) y a menudo están estrechamente acoplados a los controles. Normalmente contienen código que manipula la interfaz de usuario directamente. Esta estructura dificulta o imposible reemplazar un control sin tener que actualizar el código de control de eventos. Con esta arquitectura, los archivos de código subyacente suelen acumular código que no está directamente relacionado con la interfaz de usuario, como el código de acceso a la base de datos, que termina duplicando y modificando para su uso con otras ventanas.

Capas de aplicación

Al usar el patrón MVVM, divida la aplicación en las capas siguientes:

  • La capa de modelo define los tipos que representan los datos empresariales. Esta capa incluye todo lo necesario para modelar el dominio de la aplicación principal y, a menudo, incluye la lógica de la aplicación principal. Esta capa es completamente independiente de las capas de vista y modelo de vista y, a menudo, reside parcialmente en la nube. Dada una capa de modelo totalmente implementada, puedes crear varias aplicaciones cliente diferentes si eliges, como Windows App SDK y aplicaciones web que funcionan con los mismos datos subyacentes.
  • La capa de vista define la interfaz de usuario mediante el marcado XAML. El marcado incluye expresiones de enlace de datos (como x:Bind) que definen la conexión entre componentes específicos de la interfaz de usuario y varios miembros de la vista-modelo y del modelo. A veces, puede usar archivos code-behind como parte de la capa de vista para contener el código adicional necesario para personalizar o manipular la interfaz de usuario o extraer datos de los argumentos del controlador de eventos antes de llamar a un método del modelo de vista que ejecuta la tarea.
  • La capa de modelo de vista proporciona destinos de enlace de datos para la vista. En muchos casos, el modelo de vista expone el modelo directamente o proporciona miembros que encapsulan miembros específicos del modelo. El modelo de vista también puede definir miembros para realizar un seguimiento de los datos relevantes para la interfaz de usuario, pero no para el modelo, como el orden de visualización de una lista de elementos. El modelo de vista también actúa como punto de integración con otros servicios, como el código de acceso a datos. En el caso de proyectos sencillos, es posible que no necesite una capa de modelo independiente, sino solo un modelo de vista que encapsula todos los datos que necesita.

MVVM básico y avanzado

Al igual que con cualquier patrón de diseño, hay más de una manera de implementar MVVM, y muchas técnicas diferentes se consideran parte de MVVM. Por este motivo, hay varios marcos de MVVM de terceros diferentes que admiten las distintas plataformas basadas en XAML, incluido Windows App SDK. Sin embargo, estos marcos suelen incluir varios servicios para implementar la arquitectura desacoplada, lo que hace que la definición exacta de MVVM sea algo ambigua.

Aunque los marcos de MVVM sofisticados pueden ser muy útiles, especialmente para proyectos de escala empresarial, normalmente hay un costo asociado a la adopción de cualquier patrón o técnica concretos, y las ventajas no siempre son claras, en función de la escala y el tamaño del proyecto. Afortunadamente, solo puede adoptar esas técnicas que proporcionan una ventaja clara y tangible, e ignorar a otros hasta que los necesite.

En concreto, puede obtener una gran cantidad de ventajas simplemente mediante la comprensión y aplicación de toda la eficacia del enlace de datos y la separación de la lógica de la aplicación en las capas descritas anteriormente. Esto solo se puede lograr con las funcionalidades proporcionadas por el SDK de aplicaciones de Windows y sin usar ningún marco externo. En concreto, la extensión de marcado {x:Bind} facilita el enlace de datos y mejora el rendimiento en comparación con las plataformas XAML anteriores, eliminando la necesidad de gran parte del código repetitivo que se requería anteriormente.

Para obtener instrucciones adicionales sobre el uso de MVVM básica y lista para usar, consulte en GitHub el ejemplo de UWP de la base de datos de Clientes y Pedidos. Muchos de los otros ejemplos de aplicaciones para UWP también usan una arquitectura básica de MVVM y el ejemplo de UWP de la aplicación de tráfico incluye tanto el código subyacente como las versiones de MVVM, con notas que describen la conversión de MVVM.

Consulte también

Temas

Enlace de datos en profundidad
Extensión de marcado {x:Bind}

Ejemplos de MVVM para UWP

Ejemplo de base de datos de pedidos de clientes
Ejemplo de inventario de VanArsdel
Ejemplo de aplicación de tráfico