¿Dónde puedo encontrar un buen ejemplo sobre cómo implementar completamente el patrón MVC en Windows Forms?
Encontré muchos tutoriales y ejemplos de código en varios sitios (por ejemplo, The Code Project y .NetHeaven), pero muchos son más representativos para el patrón de observador que MVC. Dado que la aplicación que deseo desarrollar es para un proyecto escolar, soy reacio a utilizar marcos como PureMVC o MVC # .
Soy de la opinión de que las aplicaciones son tan diferentes entre sí y nuestra comprensión de cómo se deben escribir las aplicaciones es aún muy limitada. Las aplicaciones pasadas 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 (incluidas la mayoría de las combinaciones):
Por lo tanto, no creo que sea posible crear una implementación de MVC (o MVP) que siempre se adapte bien.
Las mejores publicaciones que he visto explicando realmente MVC y por qué un sistema MVC está construido tal como es, es la serie “Build Your Own CAB” de Jeremy D Miller . Después de trabajar, deberías poder entender tus opciones mucho mejor. También debe tenerse en cuenta la Guía de Smart Client de Microsoft (Bloque de aplicaciones compuestas CAB / Microsoft) . Es un poco complejo, pero puede funcionar bien para aplicaciones que se ajustan bien.
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. Mucha gente como PureMVC . Nunca lo he usado, pero lo vería la próxima vez que necesite un framework 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 debe guardarse y la advertencia del archivo no guardado debería desaparecer”.
No tengo experiencia en usar “Presenter First”, pero lo intentaré cuando tenga oportunidad, ya que parece muy prometedor.
Otras preguntas sobre desbordamiento de stack que quizás quiera consultar están aquí y aquí .
Si está pensando en usar WPF en cualquier momento, eche un vistazo al patrón Model-View ViewModel (MVVM) . Aquí hay un muy buen video que debería ver: Jason Dolinger en Model-View-ViewModel .
MVVM (Model View View Model) El patrón de diseño para Winforms brinda otra opción que puede facilitar la conversión a WPF si fuera 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úntese por qué está usando MVC.
Una vez que tenga claro sus objectives , será 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 PDF)
Recomendaría MVP (patrón PassiveView en realidad) en lugar de MVC. Realmente no necesitas marcos especiales para esto, es solo cómo organizas tu código.
Un enfoque (que generalmente uso) es dividir cada formulario de Windows en tres entidades:
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 la suya a partir de algo más simple como MobileMVC . El código Compact Framework debería comstackr / ejecutar OK en Windows. Como se trata de una tarea escolar, le sugiero que realmente dedique algo de tiempo a aprender cómo funciona el MVC.
Es posible que desee echar un vistazo a la ejecución diferencial .
Aquí está en SourceForge
OMI, es una gran mejora en MVC, aunque todavía es bastante inusual.
Un buen ejemplo para implementar su propia implementación de MVC usando Windows Forms se puede encontrar aquí . El código fuente está incluido.
Mientras lees, estudias y escribes el código para esta tarea, encontrarás que hay muchos desacuerdos sobre cómo se debe implementar el MVC. Este es un caso simple que refleja la separación de preocupaciones, así como un buen ejemplo de la ‘fontanería’ necesaria para conectar esto.
Cuando estás fuera de la escuela, es probable que quieras recurrir a un marco como los otros carteles han recomendado.
El bloque de aplicación de interfaz compuesta de Microsoft comenzó su vida como una implementación de MVC (entre otros patrones que implementó). La versión de lanzamiento, sin embargo, se convirtió en una implementación de MVP, que se puede argumentar como una especie de interpretación diferente del concepto de MVC.
Si está dispuesto a verificar el código de una implementación de MVP muy completa (y de alguna manera compleja), puede encontrar el MS-CAB como uno de los componentes de Microsoft Smart Client Software Factory. Viene con el código fuente. Puedes encontrarlo aquí . ¡Buena suerte!