[解決済み] MVC」の「Controller」には何が入っているのか?
質問
モデルにはアプリケーションのデータと動作が含まれ、ビューにはそれをユーザに表示する責任があり、コントローラはユーザの入力を処理する、というMVCの基本的なコンセプトは理解しているつもりです。私が不確かなのは、正確には 何 はコントローラーに入ります。
例えば、かなり単純なアプリケーション(特にJavaを考えていますが、同じ原則が他の場所でも適用できると思います)があるとしましょう。私のコードは、次のような3つのパッケージに整理されます。
app.model
,
app.view
と
app.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" 操作で暗黙的に返すか、です。
関連
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] MVPとMVC、その違いは何ですか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] モデルデータや振る舞いをどこに置くか?[tl; dr; サービスを利用する]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
springboot project MIMEタイプ text/htmlで転送された静的ファイルを読み込む。
-
Dateが型に解決できない問題を解決する
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
アイデア Springboot Web プロジェクトを jar にパッケージ化する場合、Error: 無効または破損した jarfile x.jar 解決策
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました