MVCパターンを実装する必要があるかなり大きなSwingアプリケーションを作成しています。現在、アプリケーションは次のようになっています。
かなりの数のビューがあります。これらは階層的に作成され、1つのメインビューに複数のビューが含まれ(そして作成され)、すべてに独自のサブビューのセットなどが含まれます。これらの各ビューは、モデルを呼び出すことにより、他のビューから独立してモデルから情報を取得します。必要に応じて静的メソッド。
また、すべてが完全に分離されているコントローラーもかなりあります。各コントローラーはビューに属します。各ビューは独自のコントローラーを作成し、コントローラーをリスナーとしてユーザー入力に追加します。コントローラーはビューからイベントを受け取り、モデルの静的メソッドを使用してモデルを変更します。ビューがモデルに影響を与えず、ビューにのみ影響を与えるイベントをディスパッチする場合、ビューはこれらのイベント自体を処理します-イベントについてコントローラーに通知することはありません。つまり、コントローラーはビューをまったく認識せず、コントローラーの目的はモデルの操作のみを処理することです。| 編集:コントローラは現在、ビューへのアタッチメントです。これらには、イベント処理のロジックのみが含まれています。つまり、コントローラー自体はコンポーネントではなく、コンポーネントは含まれていません。これらは、次の例と同じ方法で実装されます。MVCの例|
アプリケーションのモデルは非常に受動的であり、リスナーさえありません(データベースを表します)。コントローラからアップデートを受信します。
この例では、ビューがコントローラーを所有しています。一般的なケースでは、コントローラーがビューを所有して作成し、ビューがコントローラーを認識しないようにすると、その逆ではなく、より良いでしょうか?その場合、なぜですか?これはどのように設計されますか?そうでない場合、コントローラーがまだビューを認識しない、より良い設計はありますか?それとも、最高のデザインはどちらでもないのでしょうか?
編集:
元のMVC定義で述べられているように:
「ビューはこの相互通信を確立する責任を負います...」という行は、ビューがコントローラーを作成するか、少なくともコントローラーへの最初の参照を持っていることを示しているようです。その逆はありません。
したがって、これは少なくともそれを行うための可能な方法です(これは有効なMVCパターンです)が、主な問題は残っています。どちらが良いですか、そして最高のデザインはどのように見えるでしょうか?特に、それぞれのビューに密接に関連している多くのコントローラーを扱う場合はどうでしょうか。
編集:コントローラーを参照するビューの別の例: Oracleの例