ObjectSquare [1999 年 7 月号]

[Happy Squeaking!!]


3.事例:MVCアーキテクチャ

3.2 MVCの3つ組 


MVCでは、対話的なアプリケーションを実現するため、アプリケーションの構成要素を、処理、表示、入力の3つ組みに分割することに決めまています。この分割が、MVCアーキテクチャの基本的な構造を規定しています。

処理を受け持つ部分は、Modelと呼ばれます。アプリケーションで必要となる実際のデータを保持しており、業務に特化した処理を実行します。オブジェクト指向の用語を使うと、エンティティやビジネスオブジェクトと呼ばれるものを指します。具体例としては、銀行口座オブジェクト、受注オブジェクトといったものが該当するでしょう。

Modelの状態を表示する部分はViewになります。ビットマップディスプレイ上に表示されるウィンドウや、その中のウィジェット群(メニュー、ボタン、リスト、スライダなど)がビューの候補になります。ビューは、モデルと比べユーザの好みといったものが介在します。そのためモデルに比べて、非常に多様で移り変わりが激しくなる傾向があります。例としてテレビの選挙速報をイメージしてみてください。候補者の現在の獲得投票数といった同じモデルについて、各局で、わかりやすさやインパクトを狙い、実に様々な表示を行っているのを見たことがあるでしょう。時にはグラフによる表示が好まれ、また時には数値表示が好まれる場合もあります。こうした性質から、ビューはなるべくモデルとは分割されているのが望ましいということになります。分割を適切に行うには、ビューの役割は単に表示を行うのみに限定される必要があります。

3つ組みの最後はControllerです。コントローラは、マウスやキーボードからの入力をイベントとして受け取る役割を受け持っています。GUIの見栄えと操作感覚を現す言葉にLook&Feelという言葉がありますが、MVCにあてはめるとLookがビューでFeelがコントローラということになります。コントローラはOSからのマウスやキーボードのクリックといったプリミティブなイベントの中から、自分に関係のあるものを選択、処理し、適切な形に変換してモデルに伝達します。古典的なMVCでは、イベントの処理に加えてアプリケーション全体の制御を行うこともしばしばあります。

Model-View-Controllerの3つ組みの関係は、図で示すと以下のようになります。


MVCの3つ組

コントローラが、OSからイベントを受け取り、モデルにメッセージを送り、モデルの状態を更新します。モデルの状態変化はビューに通知され、通知されたビューは、モデルの最新の値を取得し、再表示を行うというのが基本的な流れになります。

3つ組は、それぞれ独立しているのが望ましく、特にモデルとビューの切り離しは非常に重要です。「ビューやコントローラはモデルを知っているが、モデルはその他の要素については何も知らない」という状態になるのが理想です。そうすることでモデル部分に一切の変更を加えることなく、様々な種類のビューやコントローラをプラグインできるようになります。

とはいうものの、少なくともモデルからビューに対して状態変化を通知する仕組みができていないと、ビューは再表示を行うことができません。従って、この「モデルからビューへの通知用のメカニズム」は別途考える必要があります。この通知をできる限り「間接的」におこなわせることによって、相互の独立性を高めることができるのです。

モデルからビューへの、状態変化に伴う間接的な通知の仕組みはいろいろな形で実装することができます。特にSmalltalkでは、dependencyという仕組みを利用して実現しています。(後に説明します)。


© 1999-2001 OGIS-RI Co., Ltd.

Prev.

Index

Next