2016-05-16 8 views
1

私は最近、C#(ASP.NET Webアプリケーションではなく、デスクトッププログラム)でMVCパターンを使用して注文書プログラムを作成しています。今問題は、UIには、別のセクションにリンクするたくさんのボタンがあります。注文ページから、クリックして在庫ページに行くことができます。もちろん、各セクションには独自のMVCセットがあります。パターンビューを複数のコントローラに接続するには?

抽象化を維持しながらボタンを他のコントローラに接続するにはどうすればよいですか?つまり、各ビューは、他のコントローラーの仕組みや、作業に必要なパラメーターを理解する必要はありません。

が頭に浮かぶデザインの可能性がいくつかありますが、私は1つがある見当がつかないより良い/単純:

  • 汚い方法:ちょうど1つのビューで、必要なすべてのコントローラへの参照を置きますこの方法で抽象度が低下します。

  • 共有ビュースペース:各ボタンは独自のコントローラーを持つ別のビューですが、次にいくつかの種類のビューマネージャーが必要です。

  • ルーティング:ほぼASPに似ています。 NET RedirectToActionを使用して、一般的なタイプ(文字列など)を使用して、実行するコントローラとアクションを決定するカスタムルータを作成する。

  • 各アクションのカスタムボタン:コントローラごととアクションごとにボタンクラスを作成する。次に、ビューが必要なパラメータを各ボタンに供給するための方法が必要です。

私は何をすべきですか?

+0

なぜあなたのビューはコントローラを参照する必要がありますか?あなたのビューがイベントを送出したばかりの場合、コントローラまたはコントローラはすべてリスンして応答することができます。 –

+0

そのイベントにどのように登録しますか? InventoryButton.Clicked + = InventoryControl.ShowList(Inventory Model)参照を知らずにInventoryControl.ShowListをどうやって与えるのですか?これはコントローラ内またはOrderView.InventoryButton.Clicked + = ShowList(InventoryModel)双方向ビューとコントローラがお互いを知っていなければならない –

+0

コントローラは、通常、ビューに依存して、建設または他の適切なイベントのイベントを登録します。 –

答えて

0

私はあなたが "共有ビュー"を作成する必要があると思います。これはあなたのために働いていない場合は、そのボタンとその呼び出しのすべてを含む共有ビューを作成してから、自分のコントローラーでWebAPIのsaprate呼び出しを作成できますあなたの日付を返します。

0

私は自分のすべてのボタンを作成するファクトリパターンである4番目のオプションに変更を加えることに決めました。ファクトリにはすべてのコントローラへの参照が渡され、それに応じてすべてのボタンが初期化されます。

このビューは、建設中にこの工場を必要とし、作成できるボタンを尋ねます。

このようにして、ビューは構築中にコントローラについて何も知る必要はありません。コントローラは、ビューを全く知る必要もありません。

皆様のご意見をお寄せいただきありがとうございます。

関連する問題