2009-07-10 10 views
5

Uważam, że pisanie aplikacji internetowych i aplikacji WinForm generalnie wychodzi o wiele czystsze, niż gdy piszę aplikację konsolową.Konstrukcja podobna do MVC dla aplikacji konsolowych?

Co mam na myśli przez czystsze? Otóż ​​fakt, że interfejs użytkownika (tj. Readline/writeline) jest tak spleciony z kodem logicznym, staje się okropny, a fakt, że nie jest on sterowany zdarzeniami, oznacza, że ​​trudniej jest uzyskać dobrą abstrakcję.

Myślałem o tym i MVC próbuje rozwiązać podobne problemy w aplikacjach internetowych, więc moje pytanie jest takie coś dla aplikacji konsolowych? lub jakieś przewodniki, aby uzyskać lepsze wzornictwo w aplikacjach konsolowych?

Odpowiedz

10

Myślę, że przekonasz się, że popularną alternatywą dla kontrolera widoku modelu jest Model-View-Presenter. Model jest zasadniczo taki sam pomiędzy tymi dwoma. Rola kontrolera i widoku jest podobna, ale mogą one być nieco bardziej odpowiedzialne w zależności od implementacji. W ramach MVP istnieją dwie metody realizacji: kontroler nadzorujący i widok pasywny. MVP jest zwykle uważany za standardową architekturę dla klientów WinForms i można go również zastosować do WebForms. Oto niektóre odpowiednie linki, aby uzyskać więcej informacji:

Wreszcie, jeśli chcesz odebrać książkę, Agile Principles, Patterns, a praktyki w C# zawiera doskonałą instruktażu dla budowania konsolowa aplikacja płac.Po zakończeniu kompilacji są one budowane na interfejsie WinForms, aby pokazać, w jaki sposób ich architektura aplikacji pozwoliła im dodać nowy widok przy minimalnym nakładzie pracy.

+0

przepraszam za brak rzeczywistych hiperłącza, ale jestem nowym użytkownikiem i mam ograniczone na numer, który można wysłać. –

+0

@Brad, witamy w StackOverflow! Dodałem hiperłącza do Twojego postu. – CoderDennis

0

Kontrola widoku modelu jest wzorcem projektowym i jako taka ma zastosowanie zarówno do aplikacji internetowych, jak i aplikacji konsolowych. Być może powinieneś zadać pytanie Jak zastosować MVC do swojej aplikacji konsolowej.

Pozdrowienia

0

myślę, że można nadal korzystać z MVC dla aplikacji konsolowych.

Pamiętaj, że w aplikacjach internetowych i WinForms wiele interakcji jest odbieranych od Ciebie, ale nadal jest obecne w logice widoku, np. jakie elementy wyświetlać po kliknięciu karty.

Jest to rodzaj interakcji, którą należy samemu zakodować w aplikacji konsolowej, ale nie ma powodu, aby nie można było tego zrobić całkowicie w kodzie widoku.

Moje zdanie na temat MVC jest takie, że widok jest całkowicie odpowiedzialny za wyświetlanie właściwych danych, opcji itp. W tym świetle nie jest przestępstwem logika w widoku, o ile ta logika jest związana tylko z jak wyświetlane są rzeczy.

Oczywiście, podzielenie widoku na różne klasy prawdopodobnie nieco uprości sprawę (na przykład można podzielić kod widoku na wzorzec MVC, chociaż może to bardzo szybko skomplikować się z takimi obiektami, jak IAppView, IAppViewController, IAppViewView, dostajesz punkt :)).

3

MVC na przykład aplikacji konsoli:

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(); 
     } 
    } 
Powiązane problemy