Model View Controller
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Model View Controller(モデル・ビュー・コントローラ)は、コンピュータ内部のデータをユーザに呈示し、それに対してユーザが何らかの指示を出すタイプの、独自のユーザーインタフェースを持つアプリケーションソフトウェアを、以下に述べるようなmodel・view・controllerの3つの部分に分割して設計・実装するという技法、又はそのような構造をいう。単にMVCと呼ぶことも多い。
デザインパターンではMVCパターンと呼称されるが、MVCは他の小さなデザインパターン[1]を利用して実装されることが多く、単なるデザインパターンというより、ソフトウェアアーキテクチャとしての側面が強い[2][3]。
各モジュールが階層構造をなす為、コードの抽象化が容易で自動プログラミングなどにも適している。当初Smalltalkで実現され、特にGUIにおける有用性から他方面へ広がった。
目次 |
[編集] MVCの構造
前述のように、MVCでは、プログラムをModel(モデル)、View(ビュー)、Controller(コントローラ)、の3つの要素に分割する。
- Model
- そのアプリケーションが扱う領域のデータと手続き(ビジネスロジック[4])を表現する要素。生のデータに意味を与える部分である。また、データの変更をviewに通知するのもmodelの責任である[5]。
- 多くのアプリケーションではデータの格納に永続的な記憶の仕組み(データベースなど)が使われている。MVCではデータアクセスについては特に定めていないが、modelの中に隠蔽されると考えられる。
- View
- Modelのデータを取り出してユーザが見るのに適した形で表示する要素である。例えば、ウェブアプリケーションではHTMLと動的なデータを表示するためのコードなどにあたる。
- Controller
- ユーザの入力(通常イベントとして通知される)に対して応答しそれを処理する要素。modelとviewに変更を引き起こす場合もあるが、直接に描画を行ったり、modelの内部データを直接操作したりはしない。
なお、見た目と動作は本質的には不可分なものであり、従ってviewとcontrollerはいつでも分離できるとは限らない。このようなM-VCとなるような場合を時に「拡張MVC」と呼ぶ場合がある。
[編集] MVCのシナリオ
MVCの実装は様々であるが、制御フローは一般的に次のようになる。
- ユーザがユーザインタフェース(view)を操作する。(ボタンを押す、など)
- controllerがviewからの入力イベントを処理する。登録されているイベントハンドラやコールバックを通して行われることが多い。
- controllerがmodelにアクセスする。ユーザのアクションに応じてデータ(例えば、ショッピングカートなど)を書き換えることもある[6]。
- viewがmodelから関連するデータを取得し、ユーザーインタフェースを更新する。例えば、ショッピングカートの中身の表示を更新する。
- viewがユーザの次の操作を待つ。始めに戻って、新しいサイクルに入る。
[編集] 脚注
- ^ Observer パターン・Command パターン・Factory パターン・Facade パターンなど
- ^ Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal (1996).Pattern-Oriented Software Architecture. John Wiley and Sons. ISBN 0-471-95869-7.
- ^ Model View Controller As An Aggregate Design Pattern
- ^ 今日はユーザの誕生日かどうか判断したり、ショッピングの合計額や送料を計算したり、など
- ^ modelの変更を通知するのにObserver パターンが用いられることもある
- ^ 複雑なcontrollerはアクションの実体を隠蔽し、拡張を容易にするため、Command パターンを使って構造化されることが多い