B-Teck!

お仕事からゲームまで幅広く

【デザインパターン/TIPS】WebMVC

前回から引き続いてMVCの話題。

さんざん語り尽くされている話題ながら、上記記事を参考にWebアプリケーションのMVCを考える。

1.はじめに

MVCモデルによるGUIアプリケーション作成の流れは、Webアプリケーションに対しても影響を与えていった。
WebMVCやMVC2と呼ばれたりするものだ。
MVC2は俗称であり、下記などで用いられた「model 2 Architecture」という言葉から派生した言葉なのではないかと言われている。


2.WebMVC

WebアプリケーションにおけるMVCの実装は下図の流れ。
f:id:beatdjam:20150212000031p:plain

通常のMVCモデルとの変更点は以下の通り。

  • 入力、出力を行うのがウェブブラウザとなっている
  • HTTPは静的なコンテンツであるため、ビューからモデルの通知を受け取りデータを更新するObserverパターンが廃止される*1
  • ビューは表示を行う部分ではなく、HTMLを生成し、ブラウザにレスポンスを返す部分となっている。

 
 
 

3.番外

また、ここで同じようにWebMVCとして同じような扱いを受けるモデルが登場し始める。
前述した記事でPHPerのMVCと言われていた下記だ。
f:id:beatdjam:20150217001706p:plain

ビューをあくまでテンプレート(HTMLのひな形)とし、モデルで操作・取得したデータをコントローラー内でビューに設定していく形となる。
このような設計を用いた場合、各オブジェクトにおける動作を分離するというMVCの基本的な概念から外れたものとなり、
機能や記述がコントローラーに依存し、肥大化した「ファットコントローラー」と呼ばれる状態になってしまいやすい。


4.おまとめ

MVCと一口に言っても、個々人には認識にブレが出てしまうものだと思う。
認識の相違が埋められないまま、それぞれが「自分の正しいMVC」を実装してしまうことで、「ファットコントローラー」や、
処理が適切に分割されておらず見通しの悪い「ファットモデル」などのような状態になってしまい、手がつけられないと言った状態は避けたい。
何より、MVCというのはある意味でお題目のようなもので、開発における銀の弾丸にはなりえないから、
プロジェクトによって柔軟に対応できるようにしたいなぁ。

*1:Ajaxを利用すれば近い状態は作れるかもしれないが、あまり現実的ではない?