11

MVCパターンを実装する必要があるかなり大きなSwingアプリケーションを作成しています。現在、アプリケーションは次のようになっています。


かなりの数のビューがあります。これらは階層的に作成され、1つのメインビューに複数のビューが含まれ(そして作成され)、すべてに独自のサブビューのセットなどが含まれます。これらの各ビューは、モデルを呼び出すことにより、他のビューから独立してモデルから情報を取得します。必要に応じて静的メソッド。

また、すべてが完全に分離されているコントローラーもかなりあります。各コントローラーはビューに属します。各ビューは独自のコントローラーを作成し、コントローラーをリスナーとしてユーザー入力に追加します。コントローラーはビューからイベントを受け取り、モデルの静的メソッドを使用してモデルを変更します。ビューがモデルに影響を与えず、ビューにのみ影響を与えるイベントをディスパッチする場合、ビューはこれらのイベント自体を処理します-イベントについてコントローラーに通知することはありません。つまり、コントローラーはビューをまったく認識せず、コントローラーの目的はモデルの操作のみを処理することです。| 編集:コントローラは現在、ビューへのアタッチメントです。これらには、イベント処理のロジックのみが含まれています。つまり、コントローラー自体はコンポーネントではなく、コンポーネントは含まれていません。これらは、次の例と同じ方法で実装されます。MVCの例|

アプリケーションのモデルは非常に受動的であり、リスナーさえありません(データベースを表します)。コントローラからアップデートを受信します。


この例では、ビューがコントローラーを所有しています。一般的なケースでは、コントローラーがビューを所有して作成し、ビューがコントローラーを認識しないようにすると、その逆ではなく、より良いでしょうか?その場合、なぜですか?これはどのように設計されますか?そうでない場合、コントローラーがまだビューを認識しない、より良い設計はありますか?それとも、最高のデザインはどちらでもないのでしょうか?

編集:

元のMVC定義で述べられているように:

「ビューはこの相互通信を確立する責任を負います...」という行は、ビューがコントローラーを作成するか、少なくともコントローラーへの最初の参照を持っていることを示しているようです。その逆はありません。

したがって、これは少なくともそれを行うための可能な方法です(これは有効なMVCパターンです)が、主な問題は残っています。どちらが良いですか、そして最高のデザインはどのように見えるでしょうか?特に、それぞれのビューに密接に関連している多くのコントローラーを扱う場合はどうでしょうか。

編集:コントローラーを参照するビューの別の例: Oracleの

4

1 に答える 1

7

この概要に示されているように、コントローラーにはモデルとビューがあります。すべてのサブビューは、それぞれの親ビューによって管理されます。ここで説明するように、サブビューはイベントを親に転送する場合があります。ここに、より多くのリンクがある簡単な例があります。

于 2011-05-08T13:25:05.887 に答える