1. ホーム
  2. java

[解決済み] MVC」の「Controller」には何が入っているのか?

2022-04-29 22:52:26

質問

モデルにはアプリケーションのデータと動作が含まれ、ビューにはそれをユーザに表示する責任があり、コントローラはユーザの入力を処理する、というMVCの基本的なコンセプトは理解しているつもりです。私が不確かなのは、正確には はコントローラーに入ります。

例えば、かなり単純なアプリケーション(特にJavaを考えていますが、同じ原則が他の場所でも適用できると思います)があるとしましょう。私のコードは、次のような3つのパッケージに整理されます。 app.model , app.viewapp.controller .

の中で app.model パッケージには、アプリケーションの実際の動作を反映するいくつかのクラスがあります。これらは extends Observable を使用し setChanged()notifyObservers() を使用して、適切なときにビューを更新するようにトリガーします。

app.view パッケージにはクラス (あるいは表示の種類に応じて複数のクラス) があり、そのクラスは javax.swing コンポーネントを使用して表示を処理します。これらのコンポーネントの中には、モデルにフィードバックする必要があるものもあります。私が正しく理解していれば、Viewはフィードバックとは無関係で、Controllerが処理するはずです。

では、実際にControllerに何を入れればいいのでしょうか?この場合 public void actionPerformed(ActionEvent e) のメソッドを呼び出すだけでよいのでしょうか?その場合、バリデーションなどはコントローラで行うべきでしょうか?その場合、エラーメッセージをどのようにViewにフィードバックすればよいのでしょうか。それは、再度モデルを経由すべきなのか、それともControllerから直接Viewに送り返せばよいのでしょうか。

バリデーションをビューで行う場合、コントローラには何を書けばいいのでしょうか?

長い質問で申し訳ありませんが、私の理解を文書化し、誰かがこの問題を明確にしてくれることを望んでいます。

どのように解決するのですか?

あなたの提案した例では、あなたが正しいです:インターフェイスで "user clicked the 'delete this item' button" は、基本的にコントローラの "delete" 関数を呼び出すだけです。しかし、コントローラはビューがどのように見えるか分からないので、ビューは、"どの項目がクリックされたか、などの情報を収集する必要があります。

会話フォームで

表示 : "おい、コントローラ、ユーザーがアイテム4を削除したいと言っているんだが。

コントローラー : "うーん、彼の資格を確認したところ、彼はそれを行うことが許可されています...。おい、モデル、アイテム4を取得して、何でもいいから削除して欲しいんだ"

モデル : "アイテム4...了解です。削除されてる。コントローラに戻ります。

コントローラー : "ここで、新しいデータ一式を収集します。バックトゥユー、view."

表示 : "クール、今ユーザーに新しいセットを表示します。

このセクションの最後に、選択肢があります。ビューが別のリクエスト、 "give me the most recent data set" を行い、より純粋になるか、コントローラが新しいデータセットを "delete" 操作で暗黙的に返すか、です。