「MVC」と「MVCモデル2」は違う。

「MVC」をWebに対応させた「MVCモデル2」(MVC2)がある。
「MVC」は基本的にウィンドウベースのGUIに対応したものになる。
よってWebではそのまま利用できないので、「MVCモデル2」が登場する。

「MVCモデル2」もWebシステムではほとんどのベースとなっていて、
こちらをMVCと思い込んでいる人も多いが違う。

「モデル2」の構成

MVCとは違い「モデル」から「ビュー」への通知がなくなる。

mvc2

「モデル2」のシナリオ

モデル2は次のようなシナリオで動作するように作る。
(順番は図の番号と対応しています。)

  1. ユーザがブラウザを通してフォームなど入力する。
  2. ユーザが入力したフォームデータなどをHTTPリクエストとして
    ブラウザがコントローラへ送る。
  3. コントローラがモデルに状態を変更するように依頼する。
  4. コントローラが制御をビューに転送する。
  5. ビューがモデルの情報を取得し、
    最新の状態にしたページを生成する。
  6. ページがブラウザに返され、表示される。

「MVC」と「モデル2」の違い

「MVC」との違いは、
「モデル」が「ビュー」に状態が変わったことを通知することが
Webの性質上なくなった点。

サーバー側から「モデル」の状態変更が通知することは
HTTPではできないので、必然的にそうなる。

大したことのない変化に思えるが、
これにともない「MVC」と「モデル」構成の考え方が大きく変わる。

「モデル」が状態が変わったことを通知することができないことは、
毎回最新の状態のモデルを作ることにつながる。

「MVC」では前状態を保持しつつ状態変化に対応させるといった
「モデル」の使い回しがしやすい。

しかし「モデル2」では毎回最新の状態のモデルを作るので
使い切りになる。

この「使い回し」か「使い切り」にするかにより、
モデルを構成する状態やメソッドの設計は大きく影響される。

「使い切り」を前提とすると、
DBから取得した値をどう保持するかに全力を注いで
満足してしまう。

よって「モデル2」では、
DBから取ってきた値を保持するだけのオブジェクトが
必然的に増えてしまう傾向にある。

PR