2011年12月14日水曜日

コンポーネント指向について調べてみた

イベント駆動から始まって、次はコンポーネント指向について調べてみました。

いつものようにWikipediaでコンポーネント指向を見ると、まったくわけが分かりません。いや、部品から組み立てようということらしいんですが、それって当たり前だし、ほとんど全てのフレームワークはコンポーネント指向でしょう。

要はGUIのあれと同じ・・・

困って別のサイトを見てたら、いい解説がありました。
全然別のフレームワークの紹介なのですが、上手に説明されていたので、そのまま抜き出します。
コンポーネント指向のフレームワークでは,リクエストごとではなく,コンポーネントが発火するイベントに対するハンドラとして処理を記述します。これは既存のGUIアプリケーションと同様のモデルです。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070305/263875/
既存のGUIアプリと同じモデルだそうです。
あれ、イベント駆動についての最初の例と同じだ。

つまりコンポーネント指向とは、
・ウェブの画面上の各要素に対して、
・サーバー上のクラスを一対一に対応付けて処理する、
という設計方針という意味だと理解しました。

一方、イベント駆動とは、コンポーネント指向を実現するための実装技術なのでしょう。

Yiiのコンポーネントについて想像をめぐらす

YiiのウェブサイトにComponentについての説明があります。コンポーネントとは、パブリックなプロパティを持って、イベントを発生・処理できるとあります。

いまひとつよく分かりませんが、Yii Blog Demoを見ていて、面白いフォーム構造をしているのに気がつきました。

新規ポストの登録で、タイトルの名称は
<input type="text" name="Post[title]" />
となってます。

残念ながらデモのソースコードが見つからなかったので、想像ですが、おそらくPostというコンポーネントクラスが存在するのでしょう。新規投稿をすると、何らかのイベントが発生してPostコンポーネントを呼び出して、titleというプロパティに値を設定して、DBに保存する、という流れになっているのではないでしょうか。

ちなみにコメントの追加では、名前のところは
<input type="text" name="Comment[author]" />
です。

ポスト先を見ると、
http://www.yiiframework.com/demos/blog/index.php/post/1/Welcome%21
Commentという文字がURI内に見当たりません。
どうやってCommentコンポーネントに処理を渡しているのか・・・
単にURIを解析して対応するコンポーネントを決定しているわけではなさそうです。

バインディング

最後に・・・

このように、フォームや画面上に表示された要素と、バックエンド側での処理クラスを関係付けることをデータバインディングと呼ぶようです。

最初にこの言葉を聞いたのがJavaServer Faces(JSF)でした。
調べてみるとWindowsなど様々な場所で使われてる技術・言葉みたいですね。

リクエストを処理→テンプレートで表示、というウェブの作りとはちょっと違っていて面白いですね。

0 件のコメント: