MVCがもたらしたもの

MVCの基本をおさらいしつつ、もたらしたものを考える。

MVCはUIを持つアプリケーションにおけるデザインパターン。書籍であれば「オブジェクト指向における再利用のためのデザインパターン」によく書かれている。その考え方はもはや常識。あらゆるフレームワークの根底にあったり、改良パターンも多く提案されている。

構成とシナリオ

MVCではアプリケーション全体を「モデル」「ビュー」「コントローラ」に分けるようにする。

MVC概要図

役割 概要

ビュー

モデルの表示を提供する。ビューは表示に必要な状態とデータをモデルから直接取得する。

コントローラ

ユーザ入力を受け取り、それがモデルにとってどのような意味を持つのか解釈する。

モデル

すべてのデータ、状態、アプリケーションロジックを提供する。

MVCは次のようなシナリオで動作するように作る。(順番は図の番号と対応)

  1. ユーザがUIを通してViewに入力する。

  2. ビューに対して何かを実行すると、実行したことをビューがコントローラに通知する。
    (リスナーが反応して、ビューがコントローラの対応するメソッドを呼び出す。)

  3. コントローラがモデルに状態を変更するように依頼する。

  4. コントローラがビューに変更を依頼する場合もある。

  5. モデルの状態が変わった際に、モデルがビューに通知する。

  6. ビューがモデルに状態を要求する。

モデルとビューの分離を常識化させ「疎結合」と「分業化」を導く

MVCがもたらした一番の功績は「モデルとビューを分離させる」という常識を浸透させたこと。知ってしまうと当たり前のように考えてしまうが、MVCを知らない人が最初からモデルとビューを分離しようと考えられることはない。ビューとモデルが混ざったものを作ってしまい、痛い目をみるという経験をしてたどり着く考え方である。ただMVCというパターンを知っていれば、その考え方を共有できるありがたい。世の中のエンジニア全員が経験だけでこの考え方にどりつけるとも限らない。

「モデルとビューの分離」だけでなく「コントローラ」を導入することでさらに疎結合化される。「ビュー」あるいは「モデル」で変更が生じても「コントローラ」が吸収するかたちとなるので、「ビュー」「モデル」の間を単純に分割するよりも疎結合となる。疎結合はメンテしやすいプログラムには欠かせない要素である。

疎結合が進んだことにより、それぞれ並行して作業したり専門におこなう分業化が可能になった。「ビュー」で考えるとわかりやすい。Webなどではビューの部分(html)をデザイナーに依頼していると思われるサイトはいくつもある。

このことを考えるとMVCは、ソフトウェアパターンとしての恩恵ももちろんだが産業的インパクトも計り知れない存在でもある。