Saltar al contenido

Implementación de MVC con Windows Forms

Nuestro grupo especializado pasados muchos días de trabajo y de juntar de datos, hallamos la solución, nuestro deseo es que te resulte útil para tu plan.

Solución:

Soy de la opinión de que las aplicaciones son muy diferentes entre sí y nuestra comprensión de cómo se deben escribir las aplicaciones aún es muy limitada. Las aplicaciones anteriores de Windows Forms en las que he trabajado han sido muy diferentes entre sí. Algunas de las diferencias de diseño que he visto son (incluyendo la mayoría de las combinaciones):

  • Hable directamente con la base de datos (2 niveles)
  • Use un backend que se haya escrito para la aplicación dada (3 niveles)
  • Use un conjunto de servicios web que se escribieron para que los usen muchas aplicaciones y no se pueden cambiar para su aplicación. (Arquitectura orientada a Servicios)
  • Actualizaciones realizadas por operaciones CRUD
  • Actualizaciones que se realizan con el patrón de comando (envío de comandos al servidor backend)
  • Muchos usos del enlace de datos/ningún uso del enlace de datos
  • La mayoría de los datos son “tipo tabla” (por ejemplo, facturas) que funcionan bien en los controles de cuadrícula estándar/necesitan controles personalizados para la mayoría de los datos de la interfaz de usuario.
  • Un desarrollador/equipos de 10 o 20 desarrolladores (solo en la interfaz de usuario)
  • Muchas pruebas unitarias usando simulacros, etc. / sin pruebas unitarias

Por lo tanto, no creo que sea posible crear una implementación de MVC (o MVP) que siempre se ajuste bien.

Las mejores publicaciones que he visto de verdad. explicando MVC y por qué un sistema MVC está construido de la manera que es, es la serie “Build Your Own CAB” de Jeremy D Miller. Después de trabajar, debería poder comprender mucho mejor sus opciones. También se debe considerar la Guía de Smart Client de Microsoft (CAB/Bloque de aplicaciones compuestas de Microsoft). Es un poco complejo, pero puede funcionar bien para aplicaciones que tienen un buen ajuste.

La selección de una implementación de MVC/MVP para un proyecto de Winforms brinda una descripción general que vale la pena leer. A mucha gente le gusta PureMVC. Nunca lo he usado, pero lo miraría la próxima vez que necesite un marco MVC.

“Presenter First” es un enfoque de desarrollo de software que combina las ideas del patrón de diseño Model View Presenter (MVP) y el desarrollo basado en pruebas. Le permite comenzar escribiendo pruebas en el idioma del cliente. Por ejemplo:

“Cuando hago clic en el botón ‘guardar’, el archivo debería guardarse y la advertencia de archivo no guardado debería desaparecer”.

No tengo experiencia en el uso de “Presenter First”, pero lo intentaré cuando tenga la oportunidad, ya que parece muy prometedor.

Otras preguntas de desbordamiento de pila que quizás desee ver están aquí y aquí.

Si estás pensando en usar WPF en cualquier momento, eche un vistazo al patrón Model-View ViewModel (MVVM). Aquí hay un video muy bueno que deberías ver: Jason Dolinger en Model-View-ViewModel.

El patrón de diseño MVVM (Model View View Model) para Winforms brinda otra opción que puede facilitar la conversión a WPF si alguna vez es necesario. Magical.Trevor es otra muestra de MVVM para Windows Forms que también incluye enlaces automáticos basados ​​en nombres de propiedades.


También pregúntate por qué estás usando MVC.

  • ¿Desea poder realizar pruebas unitarias de la mayor cantidad de código posible?
  • ¿Está tratando de permitir que se reutilice la mayor cantidad de código posible?
  • ¿Está tratando de hacer que su base de código sea fácil de entender?
  • 101 otras razones que pueden ser válidas para un proyecto dado.

Una vez que tenga claro su objetivosse vuelve más fácil elegir una implementación u otra.

ACTUALIZACIÓN: además de mi respuesta anterior a continuación, sugiero leer sobre el enfoque “Presentador primero” (especialmente los artículos en PDF)

Recomendaría MVP (patrón PassiveView en realidad) en lugar de MVC. Realmente no necesita ningún marco especial para esto, es solo cómo organiza su código.

Un enfoque (que suelo tomar) es dividir cada formulario de ventana en tres entidades:

  1. Una clase de presentador/controlador: esto es con lo que realmente comienza cuando desarrolla un formulario. Aquí es donde debe residir la mayor parte/toda su lógica de “negocio”.
  2. Una interfaz de vista (IView), que contiene los métodos, propiedades y eventos. Esta interfaz es todos que el presentador sabe acerca de su forma.
  3. Al final, cuando termine de implementar el presentador y la vista (incluidas las pruebas unitarias), puede crear la clase de formulario real y hacer que implemente la interfaz IView. Luego, solo es cuestión de agregar controles apropiados al formulario y conectarlos a la interfaz.

Código de ejemplo (un pseudocódigo simple, solo para ilustración):

interface IView

    string Username  get; set; 
    string Password  get; set; 

    event EventHandler LogOnButtonClicked;

    void InformUserLogOnFailed();
    void MoveToMainScreen();


class Presenter

    public Presenter(IView view)
    
        this.view = view;
        view.LogOnButtonClicked += new EventHandler(OnLogOnButton);
    

    private void OnLogOnButton()
    
        // we ask some service to verify the username/password
        bool isLogOnOk = logOnService.IsUserAndPasswordOk(view.Username, view.Password);
        if (isLogOnOk)
            view.MoveToMainScreen();
        else
        
            view.Username = "";
            view.Password = "";
            view.InformUserLogOnFailed();
        
    

    private IView view;


class Form : IView

    public Form()
    
        presenter = new Presenter(this);
    

    public string Username
    
        get  return TextBoxUsername.Text; 
        set  TextBoxUsername.Text = value; 
    

    public string Password
    
        get  return TextBoxPassword.Text; 
        set  TextBoxPassword.Text = value; 
    

    public void InformUserLogOnFailed()
    
        MessageBox.Show("Invalid username or password.");
    

    public void MoveToMainScreen()
    
        // code for opening another form...
    

    private Presenter presenter;

¿Has mirado PureMVC? Descubrí que nadie puede ponerse de acuerdo sobre cómo se ve realmente MVC una vez que comienzan a construir una implementación específica.

Actualización: puede crear el suyo propio comenzando con algo más simple como MobileMVC. El código de Compact Framework debería compilarse/ejecutarse correctamente en Windows. Dado que se trata de una tarea escolar, le sugiero que dedique algún tiempo a aprender cómo funciona realmente MVC.

Al final de la web puedes encontrar las notas de otros sys admins, tú asimismo puedes mostrar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *