アプリケーションに 2 つのモードが必要な場合、醜い条件付きコードを防ぐためにどのデザイン パターンを使用すればよいでしょうか? アプリは現在 MVC ですが、コントローラーに条件付きコードは必要ありません。必要でない限り、ビューごとに 2 つのコントローラーは必要ありません。
助言がありますか?
アプリケーションに 2 つのモードが必要な場合、醜い条件付きコードを防ぐためにどのデザイン パターンを使用すればよいでしょうか? アプリは現在 MVC ですが、コントローラーに条件付きコードは必要ありません。必要でない限り、ビューごとに 2 つのコントローラーは必要ありません。
助言がありますか?
実装ごとに異なるサブクラス。共通のスーパークラスで、またはテンプレート メソッド パターンを使用して共有機能を備えています。
おそらく状態パターン?
JSR-168、Java ポートレット、およびその参照実装を見てください。達成しようとしているものと似ているはずです。
PureMVCで作成されたCafeTownsendデモでは、2 つの異なるビューと 2 つの別個のメディエーターが存在する同様の状況があります。そのための条件付きコードは絶対に必要ありません。使用しているテクノロジーとプログラミング言語はわかりませんが、Flex では、ListView と EditView を子として持つ ViewStack になります。
ビューの作成時に、対応するメディエータが必要に応じて登録されます。前のリンクを使用して他の実装を確認できます。
これ以上の情報がないと断定は難しいですが、戦略パターンを提案します。同じコントローラーを使用して、ストラテジー オブジェクトを交換するだけで、動作に必要な変更を加えることができます。
役立つ記事を次に示します: http://www.javaworld.com/javaworld/jw-04-2002/jw-0426-designpatterns.html
このような決定を行う適切な場所は、MVC のコントローラーです。最初にそこに書くことをお勧めします。それが本当に反復的である場合、それをクリーンアップする方法を理解するのは簡単かもしれません: 条件付きロジックを基本クラスに移動するか、言語によっては、何らかのフィルターで処理できる場合があります。アプリケーションの「モード」を理解するビューの「ファクトリー」を作成することもできます。ただし、アーキテクチャ的には、これはすべてコントローラー内にあります。
ビューに表示したくないのは当然です。これはかなり面倒です。おそらく、「ビュー」用と「編集用」の 2 つのバージョンのビューが必要になるでしょう。
結局、これがコントローラーの目的です。幸運を!