質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

979閲覧

Jqueryイベント処理のMVCモデルでの扱い

kaz_y

総合スコア11

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2022/05/04 01:32

MVCモデルのコントローラーの役割は
「コントローラーは、ユーザーの入力に基づきモデルとビューを制御する役割を担っています。「クライアント」「モデル」「ビュー」の橋渡し役となります。」と言う事ですが

Jqueryのイベント操作$(セレクタ).clickなどにビューとモデルの橋渡し的な処理を書き、別ファイルに切り出した場合、そのファイルはコントローラーに置きますか、ビューに置きますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/05/04 01:46

jQuery(Javascript)はそもそもクライアントサイドでしかないのでビュー以外ないのでは
kaz_y

2022/05/04 02:07

たしかに色々調べてみるとルーターとしての役割が多いと思ってましたが コントローラーはサーバーサイドだけの役割なんすかね... クライアントサイドでも橋渡し役にはなるような...
退会済みユーザー

退会済みユーザー

2022/05/04 02:50

> たしかに色々調べてみるとルーターとしての役割が多いと思ってましたが コントローラーがルーターの役割をする? 何かの思い違いではないですか。質問者さんの言う「ルーター」が一般的に言うルーターとは違うとか? 調べた先がネットで公開されている記事であれば、その URL を書いてください。
hentaiman

2022/05/04 03:11

> たしかに色々調べてみるとルーターとしての役割が多いと思ってましたが 2012年ごろjavascriptフレームワークの情報ならそうかもね > コントローラーはサーバーサイドだけの役割なんすかね... そんな事はない というかWEBに限らないでしょ
guest

回答2

0

フレームワークは何ですか? ASP.NET ならコントローラーに JavaScript というのはあり得ません。必ず View になります。他も同じだと思いますが。


【追記】

下のコメント欄の 2022/05/05 10:18 の私のコメントで「後でもう少し詳しい話を回答欄に追記しておきます」と書いた件です。

現在はフレームワーク等は使用していなくHTML/css/js(jquery)/phpで作ってます。ディレクトリ構成をMVCモデルを参考に整理してます

php ということはユーザーの要求に応じて動的に応答を生成して返す Web アプリを作っていて、それに MVC モデルを適用しようとしていると理解します。

であれば、Model, View, Controller はすべて Web サーバーに Web アプリとして実装されるのが普通だと思います。(普通でない話もあるでしょうがそれはちょっと置いときます)

即ち以下の図のような構成となり、ユーザーはブラウザを使って Web サーバー要求を出して、Web サーバーから応答をもらうことになるはずです。(図の矢印は実装によって変わってくるかもしれませんが)

イメージ説明

上の図の構成では Controller に javascript を書くということはあり得ません。

javascript を書くなら View に書いて、View がブラウザに応答として返すコンテンツに含めて送信するということになります。

ブラウザではその javascript を使って、ajax で要求を出して画面の部分的な更新を行うとか遷移するとかは可能です。

Jqueryのイベント操作$(セレクタ).clickなどにビューとモデルの橋渡し的な処理を書き、別ファイルに切り出した場合、そのファイルはコントローラーに置きますか、ビューに置きますか?

というのは、ルーティング(ユーザーの要求とサーバー側の処理を紐づける処理)を行うことを考えてのことのようですが、上の図のような構成の場合は javascript の出番はありません。

上の図のような構成の場合、ルーティングはサーバー側の仕事で、サーバーで動くモジュールとかミドルウェアなどで行います。

投稿2022/05/04 02:08

編集2022/05/05 08:07
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaz_y

2022/05/04 02:25

ご回答ありがとうございます 現在はフレームワーク等は使用していなく HTML/css/js(jquery)/phpで作ってます ディレクトリ構成をMVCモデルを参考に整理してます 通常はビューになるんですね 参考にさせていただきます
退会済みユーザー

退会済みユーザー

2022/05/04 02:44

> 現在はフレームワーク等は使用していなくHTML/css/js(jquery)/phpで作ってます。ディレクトリ構成をMVCモデルを参考に整理してます 質問者さんがどういうことをしているかは見えないので分かりませんが、「ディレクトリ構成をMVCモデルを参考に整理」という言葉から想像するに、一般的に Web アプリで言う MVC とは違うような気がします。 表題に初心者マークが付いているということは、質問者さんはそのあたりを熟知したエキスパートという訳ではないと思いますが、そうであれば、自己流で見当違いの方向に進む前にフレームワークを使ってどうなっているか勉強されてはいかがですか。 PHP には多々フレームワークがあって、その中には MVC を採用しているものもあるようです。 PHPフレームワークのまとめ【2022年版】 https://freelance-start.com/articles/70
kaz_y

2022/05/04 04:26

参考にさせてもらいます
退会済みユーザー

退会済みユーザー

2022/05/05 02:10 編集

どうもスルーされたようですので後でもう少し詳しい話を回答欄に追記しておきます。
kaz_y

2022/05/05 04:52

MVCモデルは設計手法だと言う事なのでJavascriptだからViewというのは少し乱暴な気がしますが... コントローラーの役割はモデルとViewの橋渡し役という事ならば 下記のようにファイルを切り出したらコントローラーになるのではないかと考えているのですが 違いますかね Event.js $(‘#btn’).click{ //ajaxでPHPからデータ取得する関数(Model) let res = ajaxPHPdata(hoge.php, param) //DOM操作する関数(View)  renderHTML(res) }
退会済みユーザー

退会済みユーザー

2022/05/05 06:13

> MVCモデルは設計手法だと言う事なのでJavascriptだからViewというのは少し乱暴な気がしますが... 回答を読んでませんね。「Model, View, Controller はすべて Web サーバーに Web アプリとして実装される」と書きましたけど。その場合は Controller に javascript は書けません。 「普通でない話もあるでしょうがそれはちょっと置いときます」と書きましたように、質問者さんの実装が普通でない場合に該当し、Controller をクライアント側に置くということであれば話は違うかもしれません。しかし、Web アプリでそのような実装があるというのは自分的には考えにくいです。はっきり言うとあり得ないと思ってます。 > コントローラーの役割はモデルとViewの橋渡し役という事ならば下記のようにファイルを切り出したらコントローラーになるのではないかと考えているのですが違いますかね 目的が分かりませんが、質問者さん自身が質問者さん自身の要件を満たすために考えた独自実装なのでしょうから「違う」とまでは言いませんけど、MVC パターンとしては普通ではないと思います。 ルーティングということなら、上にも書きましたが普通はサーバー側の仕事で、サーバーで動くモジュールとかミドルウェアなどで行います。 外部の Web API などに Controller / Model がデータを取りに行くという話なら、javascript ではなく、サーバーで動く HTTP 通信を行うコードを実装するなど別の手段を使うことになります。
kaz_y

2022/05/05 06:40

回答者さんの言われているMVCパターンの 普通とはRubyonRailesやlalabel等の フレームワークを使用するからだと思いますが MVCパターンの考え方としては合っていると思いませんか
退会済みユーザー

退会済みユーザー

2022/05/05 10:45 編集

> MVCパターンの考え方としては合っていると思いませんか 質問者さんが独自に考える質問者さん独自のパターンとして質問者さんの考えに合っていると思うなら合っているかもしれません。あくまでそれで進めたいということなら、議論しても仕方がない話で、どうぞご自由にと言う他ないです。 ただ、余計なお世話かもしれませんが、その独自実装が、質問者さんの独自の範疇を離れて、一般的に実用上になるのかと言うとかなり疑問だと思います。前にも書きましたが、独自路線はとりあえず置いといて、PHP + MVC のフレームワークを使ってみて、それがどうなっているか参考にしてはいかがですか。フレームワークが使われるのはそれなりの理由があるはずですので。
guest

0

ベストアンサー

Jqueryのイベント操作$(セレクタ).clickなどにビューとモデルの橋渡し的な処理を書き、別ファイルに切り出した場合

せっかく切り出しんだからビューに置いたら切り出した理由が消滅する
なので消去法でコントローラーになるんじゃないですか

置き場に迷ってるって事は切り出し方が何かしらおかしいと思うので見直してみてはどうでしょうね

投稿2022/05/04 01:44

hentaiman

総合スコア6421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaz_y

2022/05/04 02:11

ご回答ありがとうございます ネットで調べて見るとルーターとしての 役割をしている事が多く散見されていたので 皆さんがどう考えるかと質問しました ご意見参考にさせてもらいます
hentaiman

2022/05/04 02:36

javascriptでのmvc自体が廃れた考え方ですからね モデルの役割をデータ保持用、コントローラーをイベントの振り分け&モデルのアップデート用、ビューをモデルの反映用と考えて処理やファイルをを切り分ければビューに処理を置くのがおかしい事は分かるはず
kaz_y

2022/05/04 04:46

私も同じように考えて Modelには描画を含まないjsのビジネスロジックやデータベースと連携する為のphp(ajax通信でjson形式のデータのみ取得) Viewにはhtml.cssやdom操作(js)、 Contllerには起動時の処理とイベント処理(この中でMとVを橋渡し)をいれています 間違ってはいないと思うのですがね
hentaiman

2022/05/04 08:47

コントローラーに入れるのがしっくり来ないってんならそれはそれで正解の感覚だと思いますよ MVCで考えるから迷うだけなので、MVC+U(update)みたいな感じでViewの更新処理をコントローラーから切り出せばよろしい UはViewを更新する為だけの処理が入ったものって感じで。
kaz_y

2022/05/05 06:50

コードは下記のような感じで MVCモデルの役割を分けるという考えには適合していると思うのです トリッキーに見えますかね Event.js(Contloroller) $(‘#btn’).click{ //ajaxでPHPからデータ取得する関数(Model) let res = ajaxPHPdata(hoge.php, param) //DOM操作する関数(View)  renderHTML(res) }
hentaiman

2022/05/05 09:56 編集

トリッキーに見えるというより無理やりMVCの3層に振り分けようとするから何か読み辛いですね 書かれているコードだとviewがデータ保持する為のモデルの役割も果たしてそうに見える その作りにもう一層データ保持用のモデル(M)足したMMVCとかどうでしょうか? データ保持用のモデル(M1)と、ajaxの処理などを詰め込む為のモデル(M2)と、M1をバインドする為のビュー(V)と、それらのコントローラー(C)
kaz_y

2022/05/06 05:10

なるほど 参考にさせていただきます 貴重な、お時間付き合ってもらって ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問