2009-07-10 3 views
5

Я нахожу, что написание веб-приложений и приложений WinForm, как правило, намного чище, чем при написании консольного приложения.MVC-подобный дизайн для консольных приложений?

Что я имею в виду под уборкой? Ну, тот факт, что пользовательский интерфейс (то есть readline/writeline) настолько переплетается с логическим кодом, становится ужасным, и факт, что он не управляется событиями, означает, что сложнее получить хорошую абстракцию.

Я думал об этом, и MVC пытается решить аналогичные проблемы для веб-приложений, поэтому мой вопрос в том, что для консольных приложений есть что-то подобное? или какие-либо руководства для лучшего дизайна в консольных приложениях?

ответ

10

Я думаю, вы обнаружите, что популярной альтернативой Model View Viewer является Model-View-Presenter. Модель в основном одинакова между двумя. Роль контроллера и просмотра - очень, но они могут получить немного больше ответственности в зависимости от вашей реализации. В MVP существует два метода реализации: Контролирующий контроллер и Пассивный просмотр. MVP обычно считается стандартной архитектурой для клиентов WinForms и может также применяться к WebForms. Вот некоторые соответствующие ссылки для получения дополнительной информации:

Наконец, если вы хотите, чтобы забрать книгу, Agile принципы, шаблоны и практики в C# содержит превосходное прохождение для построения консольное приложение для расчета заработной платы.После их сборки они создают интерфейс WinForms, чтобы показать, как их архитектура приложений позволила им добавить новый вид с минимальным шумом.

+0

Я извиняюсь за отсутствие реальных гиперссылок, но я новичок, и я ограничен в количестве, что я могу опубликовать. –

+0

@Brad, добро пожаловать в StackOverflow! Я добавил гиперссылки на ваш пост. – CoderDennis

0

Model View Control - это шаблон дизайна и как таковой применим как к веб-приложениям, так и к консольным приложениям. Возможно, вы должны задать вопрос. Как применить MVC к консольному приложению.

С уважением

0

Я думаю, что вы все еще можете использовать MVC для консольных приложений.

Помните, что в веб-приложениях и WinForms много взаимодействия абстрагируется от вас, но все еще присутствует в логике представления, например. какие элементы будут отображаться при нажатии на вкладку.

Это то взаимодействие, которое вы должны закодировать самостоятельно в консольном приложении, но нет причин, чтобы это невозможно было сделать полностью в коде для представления.

Мой прием на MVC заключается в том, что представление полностью отвечает за отображение правильных данных, опций и т. Д. В этом свете это не преступление, которое имеет логику в представлении, если эта логика связана только с как материал отображается.

Конечно, разделение представления на разные классы, вероятно, упростит (например, вы можете разбить сам код представления на шаблон MVC, хотя это может очень быстро усложниться с такими объектами, как IAppView, IAppViewController, IAppViewView, вы получите точку :)).

3

MVC, например консольного приложения:

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(); 
     } 
    } 
Смежные вопросы