|
必聴講座ご紹介 Cloud Days Tokyo 2012 エムオーテックス Cloud Days Tokyo 2012 ヴイエムウェア Cloud Days Osaka 2012 アマゾン データ サービス ジャパン |
|
![]() |
| 図1●モデル,ビュー,コントローラの役割分担と相互関係 |
ビューはモデルを参照でき,モデルの状態をウインドウに表示します。モデルの状態を知る方法はいくつかあります。Smalltalkでは一般に, Objectクラスに組み込まれているObserverパターン*4を実現する機能を利用するようです。一定期間ごと,表示イベントが発生したタイミングでモデルに問い合わせる「ポーリング」という手法もあります。
ビューがコントローラを参照できるかどうかはアプリケーションによって異なります。図1では参照できる場合を示しました。単純なウインドウ・アプリケーションでは,多くの場合,ビューがコントローラを知る必要はありません。しかし,アプリケーションが複雑化すると,ビューとコントローラの相互作用が頻繁になり,ついには一体化してしまうことも珍しくありません(後述)。
一方,モデルがビューやコントローラを参照できるようには設計すべきではありません。図1でもモデルから出る矢印が存在しない点に注目してください。これは,モデルがビューと一対一対応しない可能性があるからです。言い換えれば,同じモデルに複数のビューが伴うことが考えられます。
例えば時計のアプリケーションを考えてみましょう。モデルに相当するのは時刻を刻む機構でしょう。ビューは実際に時刻を表示する部分ですが,これはアナログ時計かもしれませんし,デジタル時計かもしれません。このような場合,ビューに相当するオブジェクトを取り替えることで,表示の切り替えを実現したいものです。このためには,モデルが直接ビューを参照できると具合が悪いのです。
アプリケーション・ロジックを表現するモデルと,インタフェースを提供するビューやコントローラを分離しておくメリットはほかにもあります。将来インタフェースを取り替えたり,大きな変更を加えてもロジック部分に対する影響が少ないことです。アプリケーション・ロジックよりもインタフェースを変更する場合が圧倒的に多いでしょうから,分離するという方針は合理的です。