CakePHPを使ったウェブアプリケーション一つ目として、(ギタドラ検索 beatpool)をとりあえず完成させました。

とりあえず動かせるレベルの内容がわかるようになったところで、改めて見直しているんですがひとつ大きな勘違いをしていたのでメモ。CakePHPにかぎらず、MVCモデルの理解がまちがってたという感じですが…

CakePHPはMVCフレームワークだった

初めて触っている時は文法や法則を調べるのに必死なのでほとんど意識していなかったのですが、作っているときたまに悩むことがありました

この処理はModelに書いたらいいのか?Controllerに書いたらいいのか?

というところ。
なぜかというと、Controllerに全部書けてしまうので。
最初はModelに何か書こうという発想もなかったのですが、いろいろ調べものをしているとサンプルコードがModelに書かれていたりするわけですね…それで「ん?Modelって何かコード書いたりするの?」となったのです。

最終的にViewに必要なデータを渡して表示されることが目的なので、Viewにデータを渡すControllerでデータを加工しようという発想はいたって自然だと思っちゃうんですが、これを慣習にしているとそのうち問題がでてくるようです。
そこにModelの存在意義があるらしい。

MVCモデルとは

改めてMVCモデルを調べてみました。

MVCとは、ソフトウェアの設計モデルの一つで、処理の中核を担う「Model」、表示・出力を司る「View」、入力を受け取ってその内容に応じてViewとModelを制御する「Controller」の3要素の組み合わせでシステムを実装する方式。

IT用語辞典
http://e-words.jp/w/MVC.html

処理の中核を担う「Model」って書いてる…(3行くらいのModelを眺めながら)
なんか浅い知識でModelってDBとやりとりするだけのものって思ってたんですが、データを加工する処理ってModelに書くんですね。

正直ModelとControllerの連携をどうしたらいいかよくわからなかったのでControllerに書けるものは全部Controllerに詰め込んでいましたが、MVCモデルのお作法としては、Controllerにデータ加工する処理がガンガン入っているのは良くないらしいです。

同じコードならModelにあろうがControllerにあろうが処理速度はかわらなそうな気がするんですが、ControllerとModelがきちんと分離されていないという保守性のところが一番問題なんでしょうか。参考サイトがMVCモデルのお作法わかりやすかったです。

参考:
「MVCの勘違い」について、もう一度考えてみる – 圧倒亭グランパのブログ

Controllerに書いてる処理をModelに持っていくにはたぶんいろいろ関数化しないといけないんだろうな…難しそう。

最近再勉強中なのでしばらくCakePHPネタになるかも。ではでは~

おわり