以下のページを読みました
##MVCのユーザアクション
MVCのユーザアクションの矢印がコントローラに向いているのは何故でしょうか。
ユーザが操作するのは画面なのでユーザアクションは必ずviewなのではないか、何故なんだ、と悩んでおります。
※例えばユーザがテキストに文字を入力した場合の動きとして、見た目上、viewにアクション(直接描画)している見えるけれど
実際は
コントローラ(Aという文字が入力されたよ)→モデル(Aという文字で状態を変更したよ)→ビュー(モデルの内容を表示するよ)
というようなことを表しているのでしょうか。
追記
以下のページも参考にしました
http://at-grandpa.hatenablog.jp/entry/2013/11/01/072636
このページによると
- Userからの入力をControllerが受け取る
- ControllerはModelの持っている加工メソッドを操作する
- 加工メソッドによってModelの持つ "状態" が変わる
- ControllerがViewに命令を送る
- ViewはModelの "状態" を見て、その内容をディスプレイに表示する
viewはmodelの状態をディスプレイに表示する
とある為、MVCで画面に文字を入力した例で例えると
入力された文字は画面に表示されるよりも前にコントローラ経由でmodelが書き換わり、
最後にviewに反映されるという認識でよろしいでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
サブミット方式のMVCと、SPAのMVVMがごっちゃになってますね。
サブミットは入力イベントを拾わずに、
入力情報をまとめてコントローラーに渡す(HTTPで送信する)のだから
コントローラーに線がいってるのは当然ですね。
他のみなさんも、「入力は関係ない」と言ってます。
SPAはイベントドリブンで実装されて、オブザーバーがビューにいるんだから、
ビューに線がいってるのは当然ですね。
Vが更新されるとVMに伝搬して、VMが更新されるとVへ伝搬されるってのが、
リアルタイムで行われてるように見えるから、この辺りがごっちゃになってるんでしょうね。
MVCでもVを変更(つまり入力)するとMに伝わって、Mを変更するとVに伝わるんですけど、
伝えるタイミングが、サブミットでのリクエストとレスポンスなだけです。
ユーザの入力(文字でなくても、オブジェクトの位置変更、色の変更、ラジオボタンのチェックも含めて)をサーバ側のmodelで状態管理したほうがよりMVCとして正しい姿ななのではないか?
これら全部サーバー側のモデルで管理してます。
でなければ、ステートレスなHTTPでどうやってビューを復元するんでしょう?
・モデルの更新をまとめて一発なのか、入力のたびにやっているか
・モデルの場所がサーバーなのかクライアントなのか
って違いでしかありません。
投稿2017/10/11 07:46
編集2017/10/11 07:55総合スコア4666
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/11 08:27
2017/10/12 04:28 編集
0
コントローラ(Aという文字が入力されたよ)→モデル(Aという文字で状態を変更したよ)→ビュー(モデルの内容を表示するよ)
これはブラウザで「A」を入力後にボタンをクリックするなどしてサーバーへのリクエストをするとブラウザの再描画画面に「A」が表示される場合のことを言っているでしょうか。
それともキーボードの入力でブラウザのテキストボックスに文字が表示されることを言っているでしょうか。
MVCで画面に文字を入力した例で例えると
入力された文字は画面に表示されるよりも前にコントローラ経由でmodelが書き換わり、
最後にviewに反映されるという認識でよろしいでしょうか。
「画面への文字の入力」はMVCとは関係なく、クライアント(ブラウザ)からサーバー(コントローラー)へのリクエストにより、入力した文字をモデルに反映する必要があるのであればモデル生成時に設定し、反映が不要であれば(コントローラでの分岐にしか使わないなど)モデルに反映しないと思います。
また、入力した文字がビューに反映されない場合もありますし、カンマ編集等されて表示されるのであれば入力した文字がビューに反映されていないともいえます。
画面への文字の入力にこだわっておられるようですが、「次へ」などのボタンをクリックすることも文字を入力することも、ラジオボタンを選択することも全てブラウザに対するただの操作ではないでしょうか。
投稿2017/10/11 05:36
編集2017/10/11 06:05総合スコア559
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/11 06:22
2017/10/11 06:31 編集
2017/10/11 06:44
2017/10/11 08:13
2017/10/12 00:58 編集
0
ASP.NET MVC の話であれれば、
MVCのユーザアクションの矢印がコントローラに向いているのは何故でしょうか。
ユーザーが要求を出す・呼び出すのは必ず Controller のアクションメソッドになるからです。ユーザーが View を呼び出すということはありません。
参考にされている記事の図は、少なくとも Model のあたりが ASP.NET MVC のものとは異なります。データを処理するのが Model となってますが、そうではないです。(その機能を持たせることはできますが、それがメインではないです)
投稿2017/10/10 09:40
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/10 09:46
退会済みユーザー
2017/10/10 10:26
2017/10/10 12:54
退会済みユーザー
2017/10/10 13:43
2017/10/10 23:52
退会済みユーザー
2017/10/11 00:50
2017/10/11 01:47
退会済みユーザー
2017/10/11 02:21
2017/10/11 02:59
退会済みユーザー
2017/10/11 05:51
0
https://teratail.com/questions/29574
2年近く前におんなじような質問をしてましたので、こちらも参考になさってみてください。コメント欄が参考になると思います。
投稿2017/10/10 09:04
編集2017/10/10 09:06退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/10 09:26
退会済みユーザー
2017/10/11 07:23
退会済みユーザー
2017/10/11 07:24
2017/10/11 08:36
退会済みユーザー
2017/10/11 09:12 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。