Model View Controller
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Model View Controllerはソフトウェア設計の一技法。デザインパターンではMVCパターンと呼称される。単にMVCと呼ぶことも多い。 MVCは他の小さなデザインパターン[1]を利用して実装されることが多く、単なるデザインパターンというより、ソフトウェアアーキテクチャとしての側面が強い[2][3]。
アプリケーションソフトウェアでは全体を複数の部分に分割して設計することが多い。MVCでは、アプリケーションの特定領域とデータアクセスのModel、ユーザーインタフェースのView、Controller、の3つに分割する。
- Model
- そのアプリケーションが扱う領域のデータモデルを表現したもの。ビジネスロジックも含まれ、生のデータに意味を与える部分である[4]。
- 多くのアプリケーションではデータの格納に永続的な記憶の仕組み(データベースなど)が使われている。MVCではデータアクセスについては特に定めていない。なぜなら、データアクセスはModelの中に隠蔽されるからである。
- View
- Modelのデータをユーザが操作するのに適したかたちで表示する。主にユーザーインタフェースの要素である。例えば、ウェブアプリケーションではHTMLと動的なデータを表示するためのコードなどにあたる。
- Controller
- イベント(主にユーザのアクション)に対して応答・処理する。ModelとViewに変更を引き起こす場合もある。
- ModelはViewに関する知識を持たないので[5]、Modelから集約を構成してViewに渡すなど、両者をつなぐ処理を担当する。
MVCの実装は様々であるが、制御フローは一般的に次のようになる。
- ユーザがユーザーインタフェース(View)を操作する。(ボタンを押す、など)
- ControllerがViewからの入力イベントを処理する。登録されているイベントハンドラやコールバックを通して行われることが多い。
- ControllerがModelにアクセスする。ユーザのアクションに応じてデータ(例えば、ショッピングカートなど)を書き換えることもある[6]。
- ViewがModelから関連するデータを取得し、ユーザーインタフェースを更新する。例えば、ショッピングカートの中身の表示を更新する。
- Viewがユーザの次の操作を待つ。始めに戻って、新しいサイクルに入る。
各モジュールが階層構造をなす為、コードの抽象化が容易で自動プログラミングなどにも適している。当初Smalltalkで実現され、特にGUIにおける有用性から他方面へ広がった。
なお、見た目と動作は本質的には不可分なものであり、従ってViewとControllerはいつでも分離できるとは限らない。このようなM-VCとなるような場合を時に「拡張MVC」と呼ぶ場合がある。
[編集] 脚注
- ↑ 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 パターンを使って構造化されることが多い