Pregunta

No desarrollo demasiadas aplicaciones de escritorio/Windows Forms, pero se me ocurrió que puede haber algún beneficio al usar el patrón MVC (Model View Controller) para el desarrollo de Windows Forms .NET.

¿Alguien ha implementado MVC en Windows Forms?Si es así, ¿tiene algún consejo sobre el diseño?

¿Fue útil?

Solución

Lo que he hecho en el pasado es usar algo similar, Modelo-Vista-Presentador.

[NOTA:Este artículo solía estar disponible en la web.Para verlo ahora, deberá descargar el CHM, luego ver las propiedades del archivo y hacer clic en Desbloquear.Luego puede abrir el CHM y buscar el artículo.¡Un millón de gracias, Microsoft! suspiro]

El formulario es la vista y tengo una interfaz IView para ello.Todo el procesamiento ocurre en el presentador, que es solo una clase.El formulario crea un nuevo presentador y se hace pasar por el IView del presentador.De esta manera, para realizar pruebas, puede pasar un IView falso y luego enviarle comandos desde el presentador y detectar los resultados.

Si tuviera que utilizar un Model-View-Controller completo, supongo que lo haría de esta manera:

  • La forma es la vista.Envía comandos al modelo, genera eventos a los que el controlador puede suscribirse y se suscribe a eventos del modelo.
  • El controlador es una clase que se suscribe a los eventos de la vista y envía comandos a la vista y al modelo.
  • El modelo genera eventos a los que se suscribe la vista.

Esto encajaría con el diagrama MVC clásico.La mayor desventaja es que con los eventos, puede resultar difícil saber quién se suscribe a qué.El patrón MVP utiliza métodos en lugar de eventos (al menos de la forma en que lo he implementado).Cuando el formulario/vista genera un evento (p. ej.someButton.Click), el formulario simplemente llama a un método en el presentador para ejecutar la lógica correspondiente.La vista y el modelo no tienen ninguna conexión directa;ambos tienen que pasar por el presentador.

Otros consejos

Bueno, en realidad Windows Forms implementa una versión de "estilo libre" de MVC, al igual que algunas películas implementan alguna mala interpretación de "estilo libre" de algunos libros clásicos (me viene a la mente Romeo y Julieta).

No estoy diciendo que la implementación de Windows Forms sea mala, es solo...diferente.

Si usa Windows Forms y técnicas de programación orientada a objetos adecuadas, y tal vez un ORM como EntitySpaces para acceder a su base de datos, entonces podría decir eso:

  1. La infraestructura ORM/OOP es el modelo
  2. Las formas son las vistas
  3. Los controladores de eventos son el controlador.

Aunque tener tanto la Vista como el Controlador representados por el mismo objeto hace que separar el código de la representación sea mucho más difícil (no existe una manera fácil de conectar una "vista GTK+" en una clase derivada de Microsoft.Windows.Forms.Form).

Qué puedes hacer, si eres lo suficientemente cuidadoso.Es mantener su código de formulario. completamente sepárelo del código de su controlador/modelo escribiendo solo elementos relacionados con la GUI en los controladores de eventos y toda la demás lógica de negocios en una clase separada.En ese caso, si alguna vez quisiera usar GTK+ para escribir otra capa de Vista, solo necesitaría reescribir el código GUI.

Windows Forms no está diseñado desde cero para usar MVC.Tienes dos opciones.

Primero, puedes implementar tu propia implementación de MVC.

En segundo lugar, puede utilizar un marco MVC diseñado para Windows Forms.

El primero es sencillo de empezar a hacer, pero cuanto más avanzas, más complejo es.Sugeriría buscar un marco MVC bueno, preexistente y bien probado, diseñado para funcionar con Windows Forms.Yo creo esta publicación de blog es un buen punto de partida.

Para cualquiera que esté empezando, sugeriría omitir Windows Forms y desarrollar en WPF, si tiene la opción.Es un marco mucho mejor para crear la interfaz de usuario.Se están desarrollando muchos marcos MVC para WPF, incluido Éste y Aquél.

Según Microsoft, el bloque de aplicaciones UIP mencionado por @jasonbunting está "archivado". En cambio, mira el Bloque de aplicaciones de cliente inteligente o incluso el más nuevo Fábrica de software de cliente inteligente, que admite tanto WinForms como WPF SmartParts.

Regístrese en el Bloque de aplicación del proceso de interfaz de usuario (UIP).No sé mucho al respecto, pero lo miré hace unos años.Es posible que haya versiones más nuevas, consulte.

"El bloque de aplicaciones UIP se basa en el patrón modelo-vista-controlador (MVC)".

Eche un vistazo al bloque de aplicación MS Patterns and Practices Smart Client, que tiene orientación y clases que le guiarán en la implementación de un patrón de presentador de vista de modelo en formularios de Windows; eche un vistazo a la aplicación de referencia incluida.

Para WPF esto está siendo reemplazado por el prisma proyecto

El enfoque de las fábricas de software es una excelente manera de aprender las mejores prácticas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top