![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
一般的なフレームワークを用いたMVCについて質問です。
例えばM、これはモデルですね。
普通DBヘの接続はモデルでおこないクエリの発行もモデルで行いますね。
その後、クエリ実行後の結果をコントローラー側に返すと思います。
このとき、普段わたしはモデル上ではDB空の目的のデータをいっさい処理せずそのまま
コントローラに返します。
返り値として、何かしらの一覧データを取得するものとします。例えば
[
{name : "タロウ" , age : "20","town_id" : 10,"city_id" : 49, "prefecture_id" : 23},
{name : "花子" , age : "20","town_id" : 10,"city_id" : 49, "prefecture_id" : 23},
{name : "邦夫" , age : "20","town_id" : 10,"city_id" : 49, "prefecture_id" : 23}
]
といった感じで特定の組み合わせのハッシュを多次元配列(リスト)的にラップしたものがかえりますよね。
そして、上記データをコントーラー側が受け取り、さぁいざビューへと受け渡す際に、どの程度コントローラでデータの
加工を行うものかが気になっています。
たとえば上記データでは「県市町」のデータがユニークなIDとして保持しています。このままでは「タロウ」が
どの住所なのかがわかりません。どこかで「県市町」のデータリストを受け取りループで一致する住所を取得する
必要があります。
それをコントローラあるいはビュー・・・・どちらで行うのがMVCとして正しいのでしょうか?多少のループなら
ビュー側で行うのもありかとおもいますが、はやりビューがループであふれかえるのは作業しにくいですよね。
MVCの基本だとは思いますが、rubyやPHPなど、フレームワークごとの細かい思想はあるでしょうが
一般的なMVCとしてみるとどうでしょうか?
ちなみに、モデル内でjoin などつかって県市町のテーブルをくっつけるのはここでは考えないものとしてください。
個人的にはビュー内では大きなループ一度ですませたいものですが ・・・。
No.4ベストアンサー
- 回答日時:
No1です。
>コントローラは完全に、モデルで取得したデータをビューへ橋渡しするためだけに存在するというような意味合いってことでしょうか?
補足へ回答しようとしたら、すでにNo2の方が書いてましたね。
ユーザーのGUI操作に伴って、適宜モデルやビューを呼び出すのがコントローラーです。
ビューから直接モデルを参照した方が良ければすればよい。
あまり、「MVCモデル」にこだわらず、それぞれのフレームワークの枠組みに従って開発すれば良いと思いますよ。フレームワークのルールで開発するとおそらく一番効率がいいわけなので。
Railsだと、Model+View+Controlでなく、Database+Template+Processingと思えば良いのかな。
No.2
- 回答日時:
>>MVCモデルの場合は、ビジネスロジックはModelの中に実装します。
>とありますが、
>コントローラは完全に、モデルで取得したデータをビューへ橋渡しするためだけに
>存在するというような意味合いってことでしょうか?
コントローラは入力をモデルに引き継ぐのが役割です。
Webであれば,ページ遷移まわりはコントローラの役割になります。
ページ遷移に伴って,入力がくっついて来ます。
ビューの更新は,本来的にはビュー自身の役割です。
ビューがモデルの変更を検知して (e.g. Observer Pattern),更新します。
さらに,ビューはモデルを直接参照します。
ただし,Web MVCではこの更新の仕組みを使うことは無いでしょう。
そもそもモデルの変更,ということがありえない世界なので。
それもあって,コントローラーなりMVCのフレームワークなりが,ビューへ描画要求を出すことになります。
# 大元のMVCは状態を持つ環境で生まれています。HTTPのように状態を持たない環境でMVCをやろうとすると,どこかに歪みが出てきます。
MOVEは望まれなかった子 - the sea of fertility
http://ugaya40.net/architecture/dis_mov.html
にもあるのですが,元々MVCはPDSによる責務の分離が根本の思想です。
表示に関わることであればP側,つまりVまたはCで処理し,そうでないならばD側,つまりMで処理します。
ちなみに,CにPLを持たせた場合,MVCとは別の名前が付いています。
# MVP (Model - View - Presenter)
ご回答ありがとうございます。
> 大元のMVCは状態を持つ環境で生まれています。HTTPのように状態を持たない環境でMVCをやろうとすると,どこかに歪みが出てきます。
なるほど、WEBアプリにおける
MVCそのものが後発だったため、本来のMVCとはことなるのですね。
WEBアプリで正しいMVCで設計しようとしても、
もともと無理があるということなのですね。
No.1
- 回答日時:
Ruby on Rails のようにMVCモデルでないにもかかわらず、Model View Controlという用語を使っているフレームワークがあるため、混乱している人がいるようです。
MVCモデルの場合は、ビジネスロジックはModelの中に実装します。あなたの考えはMVCモデルから外れています。
もちろん、別にMVCモデルに従って設計しなければならないわけではないので、自分の好きなように設計すれば良いかと思いますよ。
この回答への補足
ご回答ありがとうございます。
>MVCモデルの場合は、ビジネスロジックはModelの中に実装します。
とありますが、
コントローラは完全に、モデルで取得したデータをビューへ橋渡しするためだけに
存在するというような意味合いってことでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
【C#】DataGridViewの最大列数...
-
XMLHttpRequestでウェブページ取得
-
WordでExcelデータを差込...
-
excel access連携 このテーブル...
-
★お手上げ状態です。助けてくだ...
-
ArrayListへArrayListの格納
-
C言語で地図を描きたい
-
ActiveReportのサブレポート機...
-
JavaからPHPへの値の受け渡し
-
「外部データの取り込み」とい...
-
json_encodeが表示しない
-
西暦4桁に変換する方法
-
エクセルVBAで楽天証券に注...
-
Excel2016やWord2016のリボンの...
-
「取得先」という表現について
-
Dosブロンプトでtabを出力したい
-
VB.NETからVBAマクロ(引数)を呼...
-
<A href ~で複数の値を渡したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DTOとEntityの差は何ですか。
-
wordの差し込み印刷で文字...
-
【C#】DataGridViewの最大列数...
-
WordでExcelデータを差込...
-
excel access連携 このテーブル...
-
ActiveReportのサブレポート機...
-
「外部データの取り込み」とい...
-
GridViewからチェックボックス...
-
★お手上げ状態です。助けてくだ...
-
INIファイルに一括書き込みを行...
-
VBA内でのGetPixelを使用した時...
-
VB.NET 2017の勉強中です。 今...
-
表を表示するコントロールについて
-
C#でのForm間のデータ受け渡し...
-
ASP.NET GridView の検索画面で...
-
C言語で地図を描きたい
-
回線速度が64kbpsだったら、64k...
-
ADOを使用してExcelファイルを...
-
MSFlexGridのデータを初期化し...
-
画像の読み込み&白黒判別プロ...
おすすめ情報