• 締切済み

【プログラム設計】MVCモデルのVについて

MVCモデルのVで送られるデータは、生のデータを加工、例えば "2000" → "2,000円"  "NULL" → "終了しました" "1" → "NEW!" 等 ある程度モデル等で置換、加工をした上でデータを送った方いいでしょうか? それとも生データで送ってV上で置換、加工したほうがいいでしょうか? 加工データで送るメリット  Vが複数ある場合(モバイル版、PC版等)加工が1回ですむ、変更が一度にできる 生データで送るメリット  "NULL" → "<img src='/unknown.gif'>"等 汎用性がきく もしくは加工済み 生、両方Vに送るのであれば、 やはりC(コントローラ)かM(モデル)で処理はすましておいたほうがいいですよね。

みんなの回答

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.3

このあたりに関しては人によって判断が大きく変ると思います。はっきりいってどちらに処理をさせてもいいと思います。 今までの経験ではMに持たせるほうが多かったです。しかし、CakePHPを触るようになって、Helperクラスを使ってVに持たすようになりました。 よくよく考えると、Vに持たす方が適切かなと感じます。「"2000" → "2,000円"」といったことを実現するために、Mに表示用のメソッドを追加すると言うことですよね。単に「"2000"」を取得するメソッドとは別に。画面によって少し表示が違えば、その分メソッドを追加していくと。かなり冗長に感じます。 そもそもMVCのそれぞれの役割をきちんと考えたとき、表示のための機能をMに持たせてしまうことは適切ではないように感じます。表示のための微調整・加工はVで行うべきではないかと思います。 とはいえ、(元も子もありませんが)どちらでもいいと思います。プロジェクトによって、設計する人によって使用する言語やフレームワークによって都合のいい方を選んでいいと思います。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

うーん、冒頭の変換例を見ると何かモデルとビューの違いを勘違いしているような…… 簡単に言うと、モデルとビューの両方で変換すべきです。ただし、その変換の目的はかなり違います。 冒頭の例はすべておかしいです。ではどうしたらいいかというと…… > "2000" → "2,000円"  モデルでは数値の 2000 に変換して外部に提供。ビューではその数値を "2,000円" という形にする。 > "1" → "NEW!"  モデルでは true/false に変換して、isNew というプロパティとして外部に提供。ビューではそのプロパティをもとに "NEW!" と表示するか否かを決める。 あるいはその値が商品のステータスを表すもので、取りうる値が 3値以上ならば:  モデルではその値をそのまま数値に変換するか商品のステータスを表す列挙体に変換して外部に提供。ビューではその値をもとに商品ステータスを表示する。 ……という具合にすべきでしょう。 上記を見ればわかる通り、モデルは表示のことを考えてはいけません。データが本来ならどのような型であるべきかだけを考えてデータを加工しましょう。 上記の例で 2 番目を書かなかったのは、その本来あるべき型がなんなのか判断できなかったためです(NULL じゃなかったときに何が入ってるんだ?)。 上記のようにすれば、ビューではその提供された値をもとに表示を自由にできます。たとえば、価格をドルやユーロに変換してくれと言われたなら、モデルが 2000 という数値を提供しているなら単なる乗算で変換できますが、"2,000円" という文字列しか受け取れないとなったら文字列解析という余計な手間が入ります。 参考 URL: やはりお前らのMVCは間違っている http://www.slideshare.net/MugeSo/mvc-14469802 PHPerのMVCの一体どこが間違っていたのか http://d.hatena.ne.jp/MugeSo/20121224/1356345261

  • Yoshi_F
  • ベストアンサー率42% (9/21)
回答No.1

Vはビューだから表示させる処理だけでいいと思います。 Vで加工させるとごちゃごちゃになり改修しずらいし、役割がおかしいんじゃないですか。 Mで加工するものだと思いますよ。

参考URL:
http://ja.wikipedia.org/wiki/Model_View_Controller

関連するQ&A