
一般的なフレームワークを用いた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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Strutsで画面に表示した値の再...
-
表を表示するコントロールについて
-
INIファイルに一括書き込みを行...
-
DTOとEntityの差は何ですか。
-
excel access連携 このテーブル...
-
GridViewからチェックボックス...
-
XMLHttpRequestでウェブページ取得
-
長い1枚ページを無限スクロール...
-
小数点以下を含む計算でバグが...
-
Dosブロンプトでtabを出力したい
-
URLのパラメータをGETのままで...
-
ifの条件(不等号)を動的に埋...
-
「取得先」という表現について
-
shシェルスクリプト 空白行の...
-
DBのハッシュ化したパスワード...
-
バッチファイルでpingの結果を...
-
一週間の表示の仕方と文字表示
-
switch()文で値の大小比較
-
VBA コレクションに2次元配列...
-
syntax error, unexpected 'ech...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
wordの差し込み印刷で文字...
-
【C#】DataGridViewの最大列数...
-
excel access連携 このテーブル...
-
WordでExcelデータを差込...
-
DTOとEntityの差は何ですか。
-
ActiveReportのサブレポート機...
-
INIファイルに一括書き込みを行...
-
VB6でDBからクリップボード経由...
-
JavaからPHPへの値の受け渡し
-
VisualBasic2010のPictureBoxに...
-
VBA内でのGetPixelを使用した時...
-
MSFlexGridのデータを初期化し...
-
C#でのForm間のデータ受け渡し...
-
json_encodeが表示しない
-
VB6.0とスプレッドシート
-
クリップボード画像転送方法
-
GridViewからチェックボックス...
-
「外部データの取り込み」とい...
-
TCPでデータを受け取ってそれを...
-
OleDbDataReaderで単精度浮動小...
おすすめ情報