[ トップページ ]
Web とインターネット:Web サーバと Web サービス・管理, インターフェース・デザイン・アメニティ:コンピュータ・仮想世界 (ヴァーチャルワールド), 数学・計算・情報学・プログラミング:プログラミングとコンパイラ

サーバー・コントロールなしの ASP.NET

ASP.NET は Microsoft の汎用の Web アプリケーション開発/実行環境です. CGI という,従来の Web アプリケーションのしくみの問題点を解決するために ASP.NET にはサーバー・コントロールという一種のライブラリが くみこまれていますが,私はある Web アプリケーションのプロトタイプ 開発において,このサーバー・コントロールと格闘したすえに,それを捨てる (つかわない) という決断をしました. そのことについて書くことにします.

Web アプリケーションの開発には従来,Web にもともとくみこまれた CGI (Common Gateway Interface) というしくみをつかって,Perl などのスクリプト言語がつかわれてきました. CGI プログラムは HTML のテキストを生成しますが,そのテキストは CGI プログラムのなかにうめこまれてしまいます. そのため,わかりにくい プログラムになりがちでした. ASP.NET はその問題点を解決するために, Web インタフェースの静的な構造は HTML 風のテキストで書くように なっています. もともとの HTML にない部分はサーバー・コントロールと よばれる XML 風のテキストによって記述するようになっています. よくつかわれるサーバー・コントロールは ASP.NET のライブラリのかたちで,あらかじめくみこまれているので, ユーザ (プログラマ) はそれをプログラムすることなしにつかうことができます.

ASP.NET の本は,よのなかに山ほどあって,おおくの本には ASP.NET はプログラミングなしにかなりのことができるように書いてあります. しかし,いろいろためしてみると,実は,おしきせのやりかたで データベースなどをアクセスすることをのぞくと,あらかじめ 用意されたサーバー・コントロールは非常に不自由で,あれもできない, これもできない,ということがわかります. たとえば,データベースなどの内容を表形式で表示することは容易に できますが,その表の内容を変更したり追加したりするために, ちょっと表のなかにボタンを追加しようとすると,ほとんど,おもう ようにはできないことがわかります. ユーザインタフェースの設計においては,操作性をよくするために, できるだけ自由に設計できる余地を確保しておかなければなりません.

ASP.NET の標準的なやりかたで自由度を確保しようとすると,自分で サーバー・コントロールを定義しなければならないことになります が,これまた容易なことではありません. サーバー・コントロール をどのように定義すればよくて,定義したものがどのように動作する のかは,Microsoft のドキュメントをみてもよくわからない (たぶん 動作は保証されない) からです.

結局,私はサーバー・コントロールをつかうことをすっかりあきらめて, <%= ... %> という,JSP や PHP などと同様の方法で HTML を 生成する式をうめこんでつかうことにしました. このようにすると ASP.NET にくみこまれたしくみのおおくがつかえなく なってしまいますが,とりあえずはそのことよりも,はやくプロトタイプ をつくることのほうが重要だったので,そうしました. この形式をつかうことによって自由度はかなりたかくなります. また,XML からははずれてしまいますが,サーバー・コントロールと 同程度の可読性 (readability) を確保することができます.

Struts など,他の環境をつかえば,これほど不自由なことはないとおもわれます. 今後は,もう,よほどのことがなければ ASP.NET はつかわないようにしようとおもったしだいです.

キーワード: ASP.NET, Webアプリケーション, Webインタフェース, サーバーコントロール, サーバー・コントロール, CGI, ユーザインタフェース, 反サーバーコントロール, 設計自由度

トラックバック

このエントリーのトラックバックURL:
https://www.kanadas.com/mt/mt-tb.cgi/458

コメントを投稿

Google でブログを検索:

メインページアーカイブページも見てください.
Creative Commons License
このブログはつぎのライセンスで保護されています. クリエイティブ・コモンズ・ライセンス.
Powered by Movable Type