2009-10-05 12 views
9

El Model-View-ViewModel es muy popular entre WPF y Silverlight. He estado usando esto para mis proyectos más recientes y soy un gran admirador.¿Qué hace que MVVM sea especialmente adecuado para WPF?

Entiendo que es un refinamiento de MVP. Sin embargo, me pregunto exactamente qué características únicas de WPF (y Silverlight) permiten a MVVM trabajar, y evitar (o al menos dificultar) que este patrón funcione con otros marcos o tecnologías.

Sé que MVVM tiene una fuerte dependencia de la poderosa tecnología de enlace de datos dentro de WPF. Esta es la característica que muchos artículos y blogs parecen mencionar como la clave para que WPF proporcione los medios de la fuerte separación de View from ViewModel. Sin embargo, el enlace de datos existe en many forms en otros marcos de IU. Incluso hay proyectos como Truss que proporcionan enlaces de datos de estilo WPF a POCO en .NET.

¿Qué características, aparte del enlace de datos, hacen que WPF y Silverlight se adapten exclusivamente a Model-View-ViewModel?

Respuesta

7

Enlace de datos, comandos, plantillas de control y XAML.

Sin uno de estos, MVVM sería mucho más difícil, si no imposible. Tome ASP.net por ejemplo, tiene la parte ASPX (que por el ejemplo es equivalente a XAML), tiene enlace de datos, pero no tiene comandos o plantillas de control, por lo que MVVM no es posible allí. En WinForms, tenemos enlaces de datos, y eso es prácticamente todo, por lo que tampoco es posible.

+0

¿Por qué siente que se requiere XAML para MVVM? –

+0

Por dos razones, DataBinding (en MVVM se realiza a través de XAML) y ControlTemplates. Sin este último, la edición/creación de nuestro propio control estaría ligada al código, lo que haría que MVVM fuera más difícil cuando se trabaja con controles creados por el usuario. – Carlo

+0

El enlace de datos no tiene que hacerse a través de XAML, y hay algunos que prefieren dividirlo de XAML. Si bien la creación de la IU de código es más difícil que XAML, es posible y no afecta el uso de MVVM. Y creo que las plantillas de datos son más relevantes para MVVM que las plantillas de control. –

1

Creo que la compatibilidad con el comando (ICommand) además de las excelentes capacidades de enlace de datos lo hace adecuado para WPF y Silverlight.

2

En resumen: es el enlace de datos.

por la Data Binding Overview from MSDN:

Si la unión tiene la configuración correcta y los datos proporciona las notificaciones apropiadas, entonces, cuando los datos cambian su valor, los elementos que están vinculados a los datos de reflejar los cambios automáticamente. El enlace de datos también puede significar que si una representación externa de los datos en un elemento cambia, entonces los datos subyacentes se pueden actualizar automáticamente para reflejar el cambio. Por ejemplo, si el usuario edita el valor en un elemento TextBox, el valor de los datos subyacentes se actualiza automáticamente para reflejar ese cambio.

Si configura su XAML correctamente, solo tiene que interactuar con su interfaz de usuario utilizando el modelo de vista. WPF se ocupa de actualizar la interfaz de usuario cuando cambia el modelo de vista y de actualizar el modelo de vista cuando la interfaz de usuario cambia (por ejemplo, la entrada del usuario).

+0

mmm - No creo que la vinculación de datos sea suficiente, en sí misma, a pesar de que esta es la función principal promocionada. Cosas como Truss permitirían MVVM para cualquier tecnología .NET si se tratara de enlace de datos ... (Estoy de acuerdo en que es un componente importante, pero no el único). Esperaba otras funciones que no sean de enlace de datos que sean críticas. –

2

Implementé el patrón de primos de MVVM Model-View-Presenter en MFC, WinForms e incluso MATLAB. Estoy de acuerdo con la publicación original: WPF facilita el enlace de datos muy bien, pero puede utilizar los conceptos en otras plataformas (aunque con más código).

Leyendo John Grossman's blog, la verdadera diferencia es que la interfaz de usuario debe escribirse en un idioma diferente al de la lógica comercial. Lo ideal parece ser que el desarrollo de la interfaz de usuario es realizado por "diseñadores" y no por programadores.

Esta es el área en la que WPF es única: no conozco ningún otro entorno de desarrollo que trabaje para lograr este ideal.

(Tenga en cuenta que nunca he trabajado en un equipo lo suficientemente grande como para garantizar diseñadores de IU dedicados.No puedo decir si este ideal es realmente alcanzable).

Cuestiones relacionadas