2011-11-10 20 views
0

私はマルチウィザードソフトウェアのためにシースルトンを設計しようとしており、これに対する良い解決策を見つけることはできません。私の考えはすべて複雑すぎて醜いです。 NET CFとWinFormsを使用します。などViewA、ViewB、viewcは、ViewD、各ビューは、「戻る」のボタンがあり、「次」とは 複雑なウィザードパターン

これらのビュー

は、以下のようなウィザードで使用されている「キャンセル」、それぞれのウィザードがあります。私は、ビューの数が持っている

エントリポイントとエンドポイント、それもキャンセルすることができます。

WzrdA: -> ViewA <-> ViewB <-> ViewC -> 
WzrdB: -> ViewB <-> ViewD -> 
WzrdC: -> ViewC <-> ViewD -> 

そして最後のウィザードがワークフローに組み合わされる。

WfA: ViewMain (start WfA) -> WzrdA -> WzrdB -> WzrdC -> back to ViewMain 
WfB: ViewMain (start WfB) -> WzrdA -> WzrdC -> back to ViewMain 

だから、私は2つのボタンを持つ単一のメインビュー「スタートWFA」を持っており、この場合のワークフロー「WFB」で「WFBを開始」、について例では、ビューに従わ示すことがあります。buttunが押されたキャンセル、それはすぐにメインビューに移動しなければならない場合

-> ViewA <-> ViewB <-> ViewC -> ViewC <-> ViewD -> 

そのシーケンスは、バック/次のボタンについて説明します。

誰もがこの問題の明確で素敵な解決法を知っていますか?

+0

ウィザード「ページ」を格納するためにどのようなコレクションを使用していますか? –

+0

私は、ビュー、ウィザード、ワークフローの関係について混乱しています。 ViewA、ViewB、ViewC、ViewB、ViewD、ViewC、ViewDは、WfAを実行すると、ウィザード(View)を展開します。それらは同じフォーム/テンプレートで、異なるデータを表示するためだけに使用されていますか、実際に何度も同じことが見られますか? – gregmac

答えて

2

(あなたのポストから)以下の概念は、一般的にDRY、SRPとOOPに違反:

各ビューは、 "戻る" のボタンがあり、 "次" とウィザードの

"キャンセル"フレームワークでは、通常、それらのボタンをホストする単一の親ビューがあります。ページのコレクションを管理するコントローラが必要です(リンクされたリスト<は自然なフィット感のようです)、フローロジックに従ってページを親にロードします。

私がここで説明している一般的なアーキテクチャは、MVCに適合します。 Check it out

その他:あなたのウィザードコンテナはフォーム(ホストページへのサイズ変更可能なパネル)であることができますが、ページはカスタムコントロールである必要があります。