私の Web MVC 観

よくある Web Application Framework における MVC っていうのずっと違和感あったんだけど, 私なりの落とし所見つけた感あるのでさらっと書いておく. とくに意味はない.

よくある WAF の MVC

Model
データのやり取りやロジック部分を担当する。オブジェクト層やサービス層に分類することも出来る。
Controller
ユーザからのリクエストを受け取り、リクエストをハンドリングしたり、Modelをいくつか利用して処理を行う。またその時作成したデータをViewに受け渡す。
View
Controllerから受け取ったデータから、実際の表示の生成を行う。
http://d.hatena.ne.jp/shiba_yu36/20110303/1299123350

WAF における MVC というのは上記のような説明をされてきたわけです. 引用元ではさらに A ってのを導入してわけわからなさを増しているのですがここでは放置します.

MVC 再考

というわけで, 違和感あるので考え直しましょう.

Model は, まぁいいでしょう. データだったりそのデータの永続化を考えたり, そのデータのふるまいなんかを記述したりするところ. だいたいそんなところで問題ないと思います. どこまでをふるまいとするかはいろいろありそうで宗教戦争感あるのであまり触れたくないですね. Active Record パタン嫌いです.

Controller, こいつ何なんでしょうね. よくわからん存在です. よくわからないけれど, 上のと下のをつなぐものらしいです.

View, 目に触れるもの感あります. Web の世界でいうなら HTML だとか JS だとか CSS だとか HTTP だとかその辺ですよね(←). あっここでいう WAF はサーバサイドですよ!

はい. つまり, View とは 実際の表示の生成を行う ものなんかではなく, ユーザとのインタラクションを行なうもの, なんじゃないのってことです. Web でいうなら HTTP から先は全部 View なんじゃないのってことです. Controller でルーティングとかするのおかしくないですか?ってことです.

Web じゃないところでの MVC では View は入力を受け取ったらほぼそのまま Controller にデリゲートしてたりするので Controller がいきなり ユーザからのリクエストを受け取 っているように見えます. ですが, Web では HTTP とその周辺いろいろによって Controller にとって使いやすいとは言い難い形で入力がきます. そんな複雑なものを Controller が面倒みてたらそりゃ破綻しますよね. そこまで View でやっていただいておいしいところを Controller が行なう, そういうのが MVC だと思います.

こういった考え方をコードに落とそうとすると, リンクとかフォームとかごとに HTML, JS, CSS と HTTP の扱いをひとまとめにしたコンポーネントをくっつけて遊べるような framework というかたちになるんだろうなぁ, と適当なことを考えたりしてます. 実際のところ デザインとかは別枠で必要みたいになると思うので, どうやって切り分けるのか想像もつかない感じだけれど考えるのはおもしろそう.

蛇足

なんか上のほうで放置するっていった MVAC とかいうのですが結局のところ, ここでいう Controller が A で, View が行き帰り別になって V と C になっている, というだけのものだと思います. View の行き帰りを分ける必要があるのかどうかはよく知りません.

以上, 開発の仕方どうするかみたいな話合い をそのうちするかも的な話があったような気がするので, 今 WAF とかそのへんについて考えてることを適当にダンプしてみた.