2009-07-10 9 views
5

WebアプリケーションとWinFormアプリケーションの作成は、一般にコンソールアプリケーションを作成するときよりもずっときれいになります。コンソールアプリケーション用のMVCのようなデザインですか?

クリーナーはどういう意味ですか?実際、UI(すなわち、リードライン/ライドライン)がロジックコードと絡み合っているという事実は恐ろしいものであり、イベントドリブンではないという事実は、良好な抽象化を得ることがより困難であることを意味する。

私はこれについて考えていましたが、MVCはWebアプリケーションで同様の問題を解決しようとしていますので、私の質問はコンソールアプリケーションのようなものですか?または任意のガイドを使用してコンソールアプリケーションのデザインを改善できますか?

答えて

10

モデルビューコントローラーに代わる人気のあるモデルビュープレゼンターだと思います。モデルは基本的に2つのモデルの間で同じです。コントローラーとビューの役割は、非常にですが、実装によってはもう少し責任があるかもしれません。 MVP内には、監督コントローラとパッシブビューという2つの実装方法があります。 MVPは通常、WinFormsクライアントの標準アーキテクチャとみなされ、Webフォームにも適用できます。 - http://msdn.microsoft.com/en-us/library/cc304760.aspx

  • Martin Fowler氏管理コントローラー上の - http://martinfowler.com/eaaDev/SupervisingPresenter.html
  • Martin Fowler氏パッシブビュー上 - ASPのためのMVPにhttp://martinfowler.com/eaaDev/PassiveScreen.html
  • ジェレミー・ミラーMVPに

    最後に、あなたが本をピックアップしたい場合は、アジャイル原則、パターン、およびプラクティスC#では、構築するための優れたウォークスルーが含まれていますコンソールベースの給与計算アプリケーション。コンパイルが完了すると、WinFormsのUIが構築され、アプリケーションアーキテクチャによって最小限の手間で新しいビューを追加できるようになりました。

  • +0

    私は、実際のハイパーリンクの不足をお詫び申し上げますが、私は新しいユーザーだと私は投稿できる数に蓋をしています。 –

    +0

    @Brad、StackOverflowへようこそ!あなたの投稿にハイパーリンクを追加しました。 – CoderDennis

    0

    モデルビューコントロールはデザインパターンなので、Webアプリケーションとコンソールアプリケーションの両方に適用できます。おそらく、あなたはどのようにあなたのコンソールアプリケーションに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(); 
         } 
        } 
    
    関連する問題