2009年7月29日水曜日

UIについて考える

グラフィカル・ユーザ・インターフェイスは最早当たり前。
ボタンをクリックすれば、関数やらメソッドやらが呼び出されて処理が行われる。
しかし、これをきちんと実装しているアプリケーションはまだまだ少ない。特にWEBアプリはまだまだである。
何が言いたいかというと、ボタンというものは、クリックできる状態になってから、イネーブルになって欲しいのである。

つまり、ボタンが最初からイネーブルになっていて、クリックすると、何も反応がないか、エラーメッセージがダイアログで表示されたりする。
だったら、最初からクリックできない状態にしといてね、と思う。
電車賃を買う券売機と同じと考えれば良いのである。お金を入れれば、入れたお金の分だけ、ボタンに金額のランプがついていくのが常識だ。
もし、100円入れただけで、1000円の表示がついてしまって、1000円のボタンを押せば、「まだ100円しか入れていません」とエラーメッセージが出たら腹が立つはず。

JavaScriptでもちゃんとボタンをイネーブル、ディスエーブルにできるのだから(ブラウザ依存はあるが)、
処理を書いておいて欲しいと思うのだ。

ところで、ボタンの振る舞いは、どう書くか。
私の場合には、UpdateUI()とかUpdateButton()とかのメソッドに、画面に表示されているボタンが
イネーブル、ディスエーブルになる条件のif文がずらずら並んでいる。
何かUIの状態が変わる時にそのメソッドを盲目的に呼び出すことにしている。
実際は、計算に無駄が多いし、格好悪いとも思う。
(フラグを作ってボタンの状態を記憶させるのも良いけど、この場合には、フラグとボタンと二種類の記憶領域が存在することになり無駄な気がする)

もし、オブジェクト指向で書くなら、ボタンのクラスに振る舞いのメソッドを書かなくてはならない。
しかも、順繰りに呼び出すために、オブザーバー・パターンなどを使って書く必要があり、
イベントのどっかにフックしなくてはならない。
(VCなんかの場合には、PreTranslateMessage()とか。懐かしい)

これは、制御するボタンが100個もあるなら、きちんと実装する。いや、しなくてはいけない。
けど、数個から10個程度のボタンに、デザイン・パターンを適用するには、プログラムが大げさになりすぎる。
だから、オブジェクト指向でも何でないが、UpdateUI()にまとめて書いておけば、とりあえずは良いと思う。

0 件のコメント:

コメントを投稿