« *null opening | Home | カメラのアクセス許可ダイアログ »

Nov 062007

MAX補足#2(FlashへのMVCの導入)

何故MVCを導入するか?

・汎用的な部分の実装時間を短縮することで、表現(グラフィック、モーション)のクオリティを詰める時間を確保する。

が第一の目的です。

その他にも
・スクリプトコードの見通しを良くする。
・デバッグ負荷の軽減
・複数人での作業分担開発時における効率アップ
など効果はありますが、それらも結果として成果物のクオリティを上げる時間を確保することです。

なのでMVCを導入することで逆に時間を浪費してしまうような場合には
MVCの導入に固執することなく、さっさと割り切って違う方法での実装を行うことをお勧めします。

ということでこの前提を頭の隅に置いていただいて
FlashへのMVCへの適応の概要を書いておきます。

前のエントリーで一般的なMVCの概要についてのリソースを掲載しましたが、実際問題としてそのままFlashに持ってくるのは経験上難しいと思っています。
3年ほどあれやこれやと試した経験上、Flash自体MovieClip単位でシーンやダイアログの制御を行うことが可能なので、その部分を踏襲した形での導入が一番シンプルになると考えています。

mvc01.jpg
Flashに組み込む際にはMVCそれぞれの役割を以下のようにしています。
CTRL(Controller)

ユーザ入力によるタイムラインやシーン遷移を管理。
ここを起点にしてView,Modelを操作します。

MODEL

サーバとのデータのやり取りを管理。
また受信したデータ、Flash内におけるデータセットなどの管理。

VIEW

Ctrlクラスから命令を受け、ドキュメントルートにおけるMovieClip(シーン)の制御、および深度管理を行う。

図の中央に書いてある"singleton"という表現は他のプログラム言語とはちょっと意味合いが違うのですが、独自の機能を持った一意のMovieClipクラス(例えばナビゲーションとして機能するMovieClipなど)と捉えてください。
そしてCTRLから命令を受けたVIEWはドキュメントルートレベルでのSingletonを制御しますが、そのSingleton内部で行われるそれぞれのスクリプトはその後各Singleton内部で制御されます。このSingleton内部でもMVC構造を持つのか?という質問をされることがありますが、これはケースバイケースです。労力の少ない方で実装すればよいかと・・。

この考え方は特に目新しいものではなく、クラスを使用していない記述方法でも、各MovieClipの中にスクリプトを記述することで同じような形で実装されている方は多いと思います。基本的には各瑣末の制御を分離することで各クラスの記述も簡素化され、複数人での作業分担負荷も軽減されます。CTRLやMODELと連動しなければ別個のSWFとして独自開発も可能になります。複数人での作業などの効率化についてはまた追って書いていきますが、今回はとりあえずFlashにおけるMVCの役割の概要まで・・・。

追記:MVという考え方について。
これまでMVCという3つの要素の仕組みについて記述していますが、簡単な構造であればMVという考え方も可能です。実際CTRLで担っている役割をVIEWに持たせることはさほど苦ではありません。ただ複雑な遷移や、細かいモーションを含む画面遷移(時間制御)等を行う場合などは各SingletonからのコールバックなどをVIEWが受ける、ユーザからの入力をCTRLが受けるという風に区分しないとデバッグなどの際に負荷が増えるケースが多いかと思います。

2 Comments

CtrollerはControllerではないでしょうか? 違ってたらごめんなさい。

複数人での作業などの効率化もすごく興味があるので、時間のある時で構いませんので、記事を書いていただくのを楽しみにしておきます。

ギャボー。
そうです。
スペルミスです。
いつもctrlって略してしまうので間違えました・・ってそれとも違うけど・・・汗

直しておきますw

Leave a comment

Search and Archives