MVVM se usa más comúnmente con WPF porque es perfectamente adecuado para ello. Pero, ¿qué pasa con los formularios de Windows? ¿Existe un patrón de enfoque / diseño establecido y de uso común como este también para Windows Forms? ¿Uno que funcione explícitamente bien con Windows Forms? ¿Hay un libro o un artículo que describa esto bien? Tal vez MVP o MVC basado?
winforms
design-patterns
bitbonk
fuente
fuente
Respuestas:
He intentado MVP y parece funcionar muy bien con los formularios de Windows también. Este libro tiene un ejemplo de formularios de Windows con patrón MVP (aplicación de nómina de muestra). La aplicación no es tan compleja, pero le dará una idea sobre cómo crearla.
Principios, patrones y prácticas ágiles en C # ...
Puede obtener el código fuente en Código fuente
EDITAR:
Hay dos variaciones del patrón MVP (a) Vista pasiva y (b) controlador supervisor
Para escenarios de enlace de datos complejos, prefiero ir con el patrón del controlador de supervisión. Al supervisar el patrón del controlador, la responsabilidad de vinculación de datos recae en la vista. Por lo tanto, para treeview / datagrid, esto debería estar en las vistas respectivas, solo la lógica agnóstica de la vista debería pasar al presentador.
Recomendaré echar un vistazo al siguiente marco MVP MVC #: un marco MVP
No use el nombre (es un marco MVP).
Winforms simple MVP video Winforms - MVP
Un ejemplo de cómo lidiar con la lista desplegable MVP - DropDownList
Ejemplo simple de enlace de vista de árbol (enlace de pobre). Puede agregar cualquier lógica específica de vista de árbol en BindTree ().
A continuación se muestra el fragmento de código ... no probado, directamente tecleado desde el pensamiento ...
fuente
Como ya se dijo, siempre trabajé en un patrón MVP cuando utilicé Winforms. Pero el patrón de diseño que usará no significa que usará correctamente. Hay un montón de antipatrón adjunto a MVP.
Si desea comenzar todo de una buena manera, debe usar el marco para crear un cliente inteligente. Por lo tanto, recomendaré usar ese diseño y prácticas: Smart Client Software Factory http://www.codeplex.com/smartclient
Aquí tiene una discusión sobre los marcos actuales de clientes inteligentes: http://codebetter.com/blogs/glenn.block/archive/2008/05/10/prism-cab-and-winforms-futures.aspx
PD: Me gusta esta publicación sobre los antipatrones de MVP: http://blog.mattwynne.net/2007/06/13/mvp-smells/
Espero que esto ayude
fuente
El patrón Model-View-ViewModel (MVVM) es un patrón de diseño. Por definición, un patrón de diseño muestra una solución común en el mundo orientado a objetos y esta solución se puede aplicar en varias plataformas (WPF, WinForms, Java Swing, etc.). Estoy de acuerdo en que MVVM se usa mejor con WPF porque aprovecha las fuertes capacidades de enlace. Sin embargo, Windows Forms también admite el enlace de datos.
El adaptador de formularios Windows Forms WAF muestra cómo aplicar el patrón MVVM en una aplicación de formularios Windows Forms.
fuente
He escrito sobre una variación de los patrones de diseño MVP / MVVM llamada MVP-VM, que es una solución a medida para aplicaciones winforms que requieren una cobertura de prueba completa y utilizan el enlace de datos como mecanismo principal para mantener la presentación actualizada con los datos del modelo.
MVVM para .NET Winforms
fuente
Le hice esta misma pregunta a dos de mis compañeros técnicos: ¿es posible MVVM para WindowsForms? Ambos me dieron exactamente la misma respuesta: "¡De ninguna manera! A WindowsForms le faltan los enlaces ricos de WPF y Silverlight (OneTime, OneWay, TwoWay, OnewayToSource) y también le faltan los TypeConverters ".
De nuevo, ¿podemos tener MVVM para WinForms? Si podemos. Tenemos todas las piezas Solo tenemos que pegarlos.
fuente
Creo que MVP es un patrón muy adecuado para el desarrollo de WinForms, como lo demuestra en parte su uso en CAB , el marco de Microsoft para WinForms.
Uso MVP en WinForms para extraer el código de la Vista, porque no puedo probar el código de la Vista. Y también para habilitar el código que necesita ser reutilizado (o duplicado) para mantenerse fuera de la Vista donde no se puede compartir.
Puedo referirme a mi propio proyecto donde uso el patrón MVP ExceptionReporter.NET . Aunque estoy seguro de que no lo uso perfectamente.
Usted mencionó que MVVM trabaja para WPF. Creo que la razón de esto es debido al fuerte soporte de enlace de datos. Si no estaba utilizando el enlace de datos en WPF (y ciertamente no es obligatorio), podría elegir MVP. El punto es que MVP es una buena opción para cualquier aplicación del lado del cliente. Y posiblemente una opción 'mejor', incluso en WPF, si planea compartir código entre proyectos que no son WPF.
Para obtener más evidencia del valor de usar MVP en WinForms, vea la presentación en video de Boodhoo sobre el uso de MVP: http://www.bestechvideos.com/2008/06/29/dnrtv-show-14-jean-paul-boodhoo-on-model -view-presentador Y un artículo de MSDN del mismo autor en http://msdn.microsoft.com/en-us/magazine/cc188690.aspx
fuente
Estos diseños no tratan de ocultar el modelo, sino que definen con precisión las interacciones entre las diferentes capas de las aplicaciones. Puede cambiar el backend por completo y siempre que pase un modelo a través de Bindtree, su interfaz de usuario seguirá funcionando.
Ahora el modelo de clase puede ser una mala elección de un nombre en el ejemplo que da Rajesh. Puede ser TreeData o RecordsData. Como sea que lo defina, tiene lo que necesita para usar el mecanismo de enlace de Winforms para vincular un control específico a los datos subyacentes.
El mejor sitio para buscar este tipo de material está aquí . Martin Fowler ha recopilado una variedad de patrones de diseño de interfaz de usuario útiles y patrones de diseño empresarial.
Nuevamente, la clave para esto es el uso de interfaces para definir con precisión cómo cada capa interactúa entre sí.
En mi propia aplicación (una aplicación CAD / CAM utilizada para ejecutar máquinas de corte de metal) mi estructura se ve así.
fuente
Puede usar Enterprise Architecture, Patterns and Practices como punto de partida, aunque están un poco anticuados.
Bajo la Guía general, se encuentra la Arquitectura de aplicación para .NET: Diseño de aplicaciones y servicios , que es una buena introducción a las formas .NET y la aplicación en capas de N niveles.
texto alternativo http://i.msdn.microsoft.com/ms954595.f00aa01%28en-us%2CMSDN.10%29.gif
Para "patrones" más formales, hay patrones de soluciones empresariales que usan Microsoft .NET . (fuente: microsoft.com )
Para nombrar unos pocos,
fuente
La primera buena explicación de los patrones de diseño de la interfaz de usuario que leí fue en el blog de Jeremy Miller: Building Your Own CAB . Describe los patrones comunes: Vista pasiva, MVP, etc. y aborda algunas de las formas en que podría implementarlos en C #.
fuente
Puede probar MugenMvvmToolkit que permite utilizar un "MVVM puro" para WinForms. Debido al hecho de que admite enlaces en todas las plataformas, todas las características de enlace nativas disponibles para la plataforma WPF están disponibles en todas las plataformas (incluye WinForms).
fuente