2012年3月15日木曜日

シングルコンテキストでの設計方法(2)

Titanium Mobileを使ったアプリ開発において、シングルコンテキストで作る際の工夫の続きです。3つのレベルに分けてJavaScriptを作る、という話でした。今回は、レベル2(データを取り扱う処理)とレベル3(画面操作に関係する処理)の役割について書きますね。

 

オブジェクト指向でアプリを作る場合、MVCという考え方があります。M(モデル)、V(ビュー)、C(コントロール)という区分けで、アプリの機能を分割する方法です。このMとVとCを、レベル2とレベル3に当てはめて考えましょう。

基本となるデータを扱うレベル2は、Mに該当します。データを処理する機能のほとんどをレベル2に入れるからです。もう1つのレベル3は、VとCに該当します。画面を操作するタイプのアプリでは、VとCの分離が明確になりにくく、両方が混在した形になりがちです。VとCを完全に分離しなくてもアプリは作れますから、ここの分離に強く拘る必要はないでしょう。とくに処理速度が遅いモバイル機器のアプリではね。

 

一番大事なのは、MとVCの分離です。この分離さえ上手に作れれば、将来の機能変更に対して、変更箇所が少なくて済むアプリになります。すっきりした内部構造のアプリになるというわけです。この分離をキッチリ作るように意識しなければなりません。

正確に言うなら、レベル2がMに該当するのではなく、該当すると言えるようにレベル2を作るべきという話です。扱うデータをそのまま解放するのではなく、データの構造を隠蔽して外に出さずに、用意した関数を通してアクセスさせます。オブジェクト指向に慣れているなら、get、set、addなどのメソッドを通じてデータを扱う形を知っているでしょう。それと同じように、より使いやすい機能まで加えて作るということです。

ただし、モバイル機器で実行させる場合、処理能力の低さを考慮する必要もあります。さらに悪いことに、ネイティブのコンパイラ言語ではなく、JavaScriptで動かすわけですから、データ構造の隠蔽を徹底的に行うと、処理が遅いと感じることも起こりうるでしょう。実機で動かした経験をもとに、ある程度の妥協点を見付ける必要もあるようです。この辺は、アプリの処理内容に大きく依存するため、具体的なアプリで判断するしかありません。

Mの中で何種類ものデータを一緒に扱う場合は、データが相互に関係していることも多くなります。これもレベル2に含めましょう。たとえば、顧客情報と商品情報から、特定の顧客が購入した商品の一覧を表示するといった場合です。顧客IDを指定したら、商品IDの一覧を返すといった処理を、レベル2の上位層として追加します。JavaScriptを入れる場所は、bb.cでもbb.pでもなく、新しく1文字のbb.xなどを加えます。

モデルの種類が多いアプリの場合、レベル2の上位層まで加えると、レベル2を1文字で表すのが難しくなるでしょう。そんなときは、レベル2の上位層は2文字にして、レベル3を3文字以上にする手もあります。つまり、1文字はレベル2の基礎層でデータ単体での処理、2文字はレベル2の上位層で複数データ間の処理、3文字以上がレベル3とするわけです。

 

ここまでを読んで、「bb.model」や「bb.ui」と似た話ではないかと思った人がいるかもしれませんね。実は、ここで紹介しているレベル分けの表記方法は、「model」や「ui」の改良版とも解釈できる方法なのです。「model」はレベル2に、「ui」はレベル3に該当します。つまり、「model」と記述する代わりに、「p」や「c」と1文字にすることで実現しています。「bb.model.products」と書かなければならないところを、「bb.p」で済ませられるわけです。同様に、「ui」と記述する代わりに、「pe」や「cv」と2文字にすることで伝えています。「bb.ui.products_edit」と書かなければならないところを、「bb.pe」で済ませられます。

「model」や「ui」は、アプリ内の処理の区分けであって、ソースコード上に何度も何度も記述される必要はありません。ただでさえ長くなりがちな最近のソースコードが、ますます長くなってしまいます。それを防ぐ目的でも、このレベル分けの記述方法が役立ちます。短く簡潔なソースコードを目指すというわけです。

 

以上の話から、3つのレベルは次のように解釈できるでしょう。
・レベル1:基礎層
・レベル2:MVCのM層
・レベル3:MVCのVC層

キリがよいので、ここで一旦切ります。続きは、別投稿にて。

0 件のコメント:

コメントを投稿