2

アプリケーションに 2 つのモードが必要な場合、醜い条件付きコードを防ぐためにどのデザイン パターンを使用すればよいでしょうか? アプリは現在 MVC ですが、コントローラーに条件付きコードは必要ありません。必要でない限り、ビューごとに 2 つのコントローラーは必要ありません。

助言がありますか?

4

7 に答える 7

4

実装ごとに異なるサブクラス。共通のスーパークラスで、またはテンプレート メソッド パターンを使用して共有機能を備えています。

于 2009-09-17T03:24:30.973 に答える
2

おそらく状態パターン

于 2009-09-17T05:06:37.077 に答える
1

抽象ファクトリ、またはプロキシ。コントローラーには、「モード」を取得し、それに応じて動作するために使用されるある種の Factory または Proxy インスタンスが含まれます。

于 2009-09-17T03:54:35.450 に答える
0

JSR-168、Java ポートレット、およびその参照実装を見てください。達成しようとしているものと似ているはずです。

于 2009-09-17T05:09:36.070 に答える
0

PureMVCで作成されたCafeTownsendデモでは、2 つの異なるビューと 2 つの別個のメディエーターが存在する同様の状況があります。そのための条件付きコードは絶対に必要ありません。使用しているテクノロジーとプログラミング言語はわかりませんが、Flex では、ListView と EditView を子として持つ ViewStack になります。

ビューの作成時に、対応するメディエータが必要に応じて登録されます。前のリンクを使用して他の実装を確認できます。

于 2010-03-19T18:20:12.340 に答える
0

これ以上の情報がないと断定は難しいですが、戦略パターンを提案します。同じコントローラーを使用して、ストラテジー オブジェクトを交換するだけで、動作に必要な変更を加えることができます。

役立つ記事を次に示します: http://www.javaworld.com/javaworld/jw-04-2002/jw-0426-designpatterns.html

于 2009-09-17T03:53:18.557 に答える
0

このような決定を行う適切な場所は、MVC のコントローラーです。最初にそこに書くことをお勧めします。それが本当に反復的である場合、それをクリーンアップする方法を理解するのは簡単かもしれません: 条件付きロジックを基本クラスに移動するか、言語によっては、何らかのフィルターで処理できる場合があります。アプリケーションの「モード」を理解するビューの「ファクトリー」を作成することもできます。ただし、アーキテクチャ的には、これはすべてコントローラー内にあります。

ビューに表示したくないのは当然です。これはかなり面倒です。おそらく、「ビュー」用と「編集用」の 2 つのバージョンのビューが必要になるでしょう。

結局、これがコントローラーの目的です。幸運を!

于 2009-09-17T05:34:44.680 に答える