2009-04-02 5 views
6

私が理解しているように、MVPを使用するときは、すべてのプレゼンテーションロジックをプレゼンタに移動します。しかし、プレゼンターにビューの実装について知らせたくないので、アプリケーションの別の画面に移動するにはどうしたらいいですか?実際のアプリケーションでアプリケーションフローをどのように管理しますか?C#WinFormsを使用してMVPのビュー間をどのように移動しますか?

答えて

1

これはビューのメソッドです。たとえば、ShowCustomerForm()のような抽象メソッドがあり、WinFormsの実装はCustomerForm.Show(またはWinFormsにあるもの)とWebFormsではResponse.Redirict(CustomerForm.aspx)になります。

+0

ビューがICustomerFormインターフェイスのインスタンスを作成した後、次のようないくつかのメソッドを使用してプレゼンターに渡すことができます。Init(CustomerFormPresenter) – dzendras

3

例えば、いくつかのナビゲータインタフェースの使用:

interface INavigator 
{ 
    void MoveTo (string screenName); 
    void MoveTo (string screenName, NavigationParameters parameters); 
} 

各プレゼンタを、次いで、コンストラクタに渡され、このナビゲータのインスタンスを有することになります。このように、ナビゲーションはプレゼンターと個々のビューの両方から切り離されます。

設定で定義されたスクリーン名と実際のフォームクラスの間のマッピングを持つことができます。

1

独自のMVPペアを持つ別の画面を意味するとしますか?

私は今朝このケースについて考えていましたが、私の解決策は、コーディネーターがプレゼンターとMVPペアを開く必要があることを知っていることでしょう。新しいプレゼンター+ビューが開き、終了すると、オプションで、最初のプレゼンターのメソッドが結果とともに呼び出されます。

このようにして、最初のMVPは新しい画面について何も知る必要はなく、イベントを発生させるだけです。第2のウィンドウを開いて通信するロジックは、コーディネーターに完全に含まれています。

0

Lennaertがコーディネーター(これをワークフローコントローラと呼ぶ)を使用してこれを行います。私はJava Web開発から来て、アイデアはApplicactionControllerの一種でした。私はこれに関するいくつかの問題にぶつかりました、workflowcontrollerコマンドを実行します。各コマンドは、ワークフローまたは一連の関連手順(したがって、ワークフローコントローラの名前)を表します。フローコントローラはコマンド間のナビゲートを処理し、フローコントローラはステップ間をナビゲートするナビゲータを有する。各ステップには終了イベント(プレゼンターが接続する)とNextStepメソッドがあり、これを使用して次のステップにナビゲートします。われわれのworflowcontrollerはメニューに密接に結合されているので、異なるワークフロー間をナビゲートすることができます。手順は、ビューとプレゼンターの間のリンクを確立します。私たちには設定がなく、NextStepというメソッドに実行するための次のステップを確立するロジックが組み込まれています。それは生産されていますが、私はこれにはあまり満足していません。ここに入るためには、あまりにも詳細です。 私はイベント駆動型のものに移行することを考えました。私たちはメッセージバスを使って他のすべてのコミュニケーションを行い、これを使って画面間を移動します。それが役に立つかどうかわかりません。私たちの画面はほとんどの場合、順次ワークフローで構成されています。

関連する問題