View層を考える

 N階層アーキテクチャでは、プログラム全体を「プレゼンテーション層(View)」「ビジネスロジック層(Logic)」「データアクセス層(Data)」に分けます。View層はMVCフレームワークで組まれる事が多いでしょう(IEをビューに使ってる場合とか)

 さて、仕様書を書く段階ですら無いので、ダラダラと思いついた事を書いていきます。Viewは描画すべき物を管理していますが、描画すべきものが「どんな意味を持っているか」は、関知しません。Logic層に「次どうすりゃいいのよ?」と要求を送って、返ってきた「こうしてくれ」って返答に応じるだけです。

 よって、View層の実装は別になんでもいい。QE2では、最終的にはSMILのデータを受け取って、自律的に描画するエンジンを実装する事になるでしょう。プロトタイプでは、View層はFlashを使おうと考えています。めんどくさいので、層の独立性に注意しながら、全部Flashで書いてもいいかなーとも思っています。

 描画オブジェクト群は、自分が次に何をすればいいのか知っている間*1は自律的に動きます。次の情報が無く、また情報を必要をする場合には、Logic層と交信を行い、次の描画命令を受け取ります。この時、タイミングはミリ秒単位で行い、FPSを感じさせないように出来ないかと考えています。

 先程「ViewはMVC」でと書きましたが、たとえば、テトリスでスコア「100」を表示するとします。Modelは描画すべき数値情報「100」を持っています。一方、Viewは「1」「0」「0」という画像データを管理します。それが数字の「100」である事を理解する必要はありません。それはModelの役目だからです。

 この時、Data層にも「100」という数字が格納されています。Data層の「100」はスコア情報として、View層の「100」は描画対象の数字として存在します。これは冗長ですが、アリとみなします(根拠は無いー。別にあってもいーじゃんかー)

*1:例えば、シューティングの敵キャラで、次の移動座標が軌跡指定によって決まっている場合など