2009-07-10 23 views
5

Encuentro que escribir aplicaciones web y aplicaciones WinForm generalmente sale mucho más limpio que cuando escribo una aplicación de consola.¿Diseño MVC para aplicaciones de consola?

¿Qué quiero decir con limpiador? Bueno, el hecho de que la interfaz de usuario (es decir, readline/writeline) esté tan entrelazada con el código lógico se vuelve horrible y el hecho de que no se base en eventos significa que es más difícil obtener una buena abstracción.

Estaba pensando en esto y MVC intenta resolver problemas similares para las aplicaciones web, por lo que mi pregunta es ¿hay algo así para las aplicaciones de consola? o cualquier guía para obtener un mejor diseño en aplicaciones de consola?

Respuesta

10

Creo que encontrará que la alternativa más popular a Model View Controller es Model-View-Presenter. El modelo es básicamente el mismo entre los dos. El rol del controlador y la vista son muy muy similares, pero pueden tener un poco más de responsabilidad dependiendo de su implementación. Dentro de MVP, hay dos métodos de implementación: Controlador supervisor y Vista pasiva. Generalmente, MVP se considera la arquitectura estándar para los clientes de WinForms y también se puede aplicar a WebForms. Estos son algunos enlaces relevantes para más información:

Por último, si quieres coger un libro, Principios ágiles, patrones y prácticas en C# contiene un excelente paso a paso para la construcción de una aplicación de nómina basada en consola.Una vez compeleted, compilan WinForms UI para mostrar cómo la arquitectura de sus aplicaciones les permitió agregar una nueva vista con un mínimo esfuerzo.

+0

Me disculpo por la falta de enlaces reales, pero yo soy un usuario nuevo y estoy con límite máximo de la cantidad que pueda publicar. –

+0

@rad, ¡bienvenidos a StackOverflow! Agregué los hipervínculos a tu publicación. – CoderDennis

0

Model View Control es un patrón de diseño y, como tal, es aplicable tanto a aplicaciones web como a aplicaciones de consola. Tal vez debería hacer la pregunta ¿Cómo aplica MVC a su aplicación de consola?

Saludos

0

creo que todavía se puede utilizar MVC para aplicaciones de consola.

Recuerde que en las aplicaciones web y WinForms, se abstrae una gran cantidad de interacción de usted, pero todavía está presente en la lógica de la vista, p. qué elementos mostrar cuando se hace clic en una pestaña.

Ese es el tipo de interacción que tiene que codificarse en una aplicación de consola, pero no hay ninguna razón para que no se pueda hacer completamente en el código de la vista.

Mi opinión sobre MVC es que la vista es totalmente responsable de mostrar los datos, las opciones, etc. correctos. Desde ese punto de vista, no es un crimen tener lógica en la vista, siempre que esa lógica solo esté relacionada con cómo se muestran las cosas.

Por supuesto, dividir la vista en diferentes clases probablemente facilitará las cosas (por ejemplo, podría dividir el código de vista en un patrón MVC, aunque eso puede complicarse muy rápido con entidades como IAppView, IAppViewController, IAppViewView, entiendes el punto :)).

3

MVC, por ejemplo, aplicación de consola:

public interface IController 
{ 
void RequestView(IView view); 

     IView ResponseView(); 
} 

public interface IView 
{ 
     int GetID { set; get; } 
     void DisplayId(); 

} 
public interface IModel 
{ 
     int GenrateID(int id); 
} 

//Business logic in Model 
public class Model : IModel 
{ 
     public int GenrateID(int id) 
     { 
      id = id * 10; 
      return id; 
     } 
} 

//Event Logic in Controller 
public class Controller : IController 
{ 
     private IModel model; 
     private IView responseView; 
     public Controller() 
     { 
      responseView = new View(); 
     } 

     public void RequestView(IView view) 
     { 

      model = new Model(); 
      responseView.GetID = model.GenrateID(view.GetID); 
     } 

     public IView ResponseView() 
     { 
      return responseView; 
     } 
} 
//Display Logic in View 
public class View : IView 
{ 
     public int GetID 
     { 
      get;set; 
     } 

     public void DisplayId() 
     { 
      Console.Write(GetID); 
     } 
} 

class Program 
    { 
     static void Main(string[] args) 
     { 
      IController ctr = new Controller(); 
      int input =int.Parse(args[0]); 
      IView view=new View() 
      { 
       GetID = input 
      }; 

      ctr.RequestView(view); 
      view =ctr.ResponseView(); 
      view.DisplayId(); 
     } 
    } 
Cuestiones relacionadas