- PR -

ASP.NET JavaScriptでどこまで行うべきか

投稿者投稿内容
ハルシオン
常連さん
会議室デビュー日: 2005/03/29
投稿数: 24
投稿日時: 2007-06-27 11:43
いつもお世話になっております。
ASP.NET / VB 2005 でWebアプリケーションの開発を行っております。

今までWindowsアプリケーションの開発ばかりに従事しておりましたのでWebアプリケーションの開発で戸惑うことが多く本日は表題の件をご相談させていただきます。

画面上に同一の動作を行うテキストボックスが数個存在します。
ここでは説明上、仮にテキストボックスを「売上金額1」〜「売上金額6」とさせていただきます。


@この「売上金額1」〜「売上金額6」のTextboxChange イベントではそれぞれ固有のパーセンテージを掛け算した結果をラベル(「売上結果1」〜「売上結果6」)に表示します。
Aまた、テキストボックスの内容が変更された時点で「売上結果1」〜「売上結果6」の合計をラベル「総合計」にセットします。

例)
  @「売上金額1」が変更された場合、10% を掛けて「売上結果1」ラベルに結果をセット
   「売上金額2」が変更された場合、15% を掛けて「売上結果2」ラベルに結果をセット
    …(「売上金額6」まで同様)
  A「売上結果1」〜「売上結果6」の合計を「総合計」にセット


Windowsアプリケーションの場合は迷わず計算を行う動作を実装するところなのですが、今回はwebアプリケーションです。
いちいちこの程度の計算をサーバ側で行う必要があるのかどうか、まず疑問に思いました。
しかもコントロールは6つもあるので、それぞれが入力されたタイミングでポストバックが発生してしまうのでレスポンスや画面の見た目上あまり宜しくないのでは、と憂慮しております。

単純な掛け算等の計算はJavaScriptで行うべきか。

皆様でしたら上記のような単純な計算機能はどのように実装されますか?
JavaScriptで行うべき動作にはどのようなものがあるのでしょうか。
広くご意見をお聞かせ下さい。
よろしくお願い致します。





じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-27 11:50
引用:

ハルシオンさんの書き込み (2007-06-27 11:43) より:

Windowsアプリケーションの場合は迷わず計算を行う動作を実装するところなのですが、今回はwebアプリケーションです。いちいちこの程度の計算をサーバ側で行う必要があるのかどうか、まず疑問に思いました。しかもコントロールは6つもあるので、それぞれが入力されたタイミングでポストバックが発生してしまうのでレスポンスや画面の見た目上あまり宜しくないのでは、と憂慮しております。


Web サーバ側で処理を実装するのは 「必須」 です。クライアント側で処理をするかどうかはその上で決定すべきです。そういう意味では "JavaScript でどこまで行うべきか" の問いは、「アクセシビリティ、ユーザービリティを考慮して価値のあるところまで」 という回答になるでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ハルシオン
常連さん
会議室デビュー日: 2005/03/29
投稿数: 24
投稿日時: 2007-06-27 12:18

引用:


じゃんぬねっと さん wrote:

Web サーバ側で処理を実装するのは 「必須」 です。クライアント側で処理をするかどうかはその上で決定すべきです。そういう意味では "JavaScript でどこまで行うべきか" の問いは、「アクセシビリティ、ユーザービリティを考慮して価値のあるところまで」 という回答になるでしょう。





早速のご回答ありがとうございます。
Web サーバ側で処理を実装するのは 「必須」なのですね。

もし宜しければその理由を教えていただけないでしょうか。
Webアプリケーションのルールのようなものなのか、JavaScriptで返した値などが信用できないケースがあるからなのか、じゃんぬねっとさんご自身の経験則からなのでしょうか。

JavaScriptにこだわっている訳ではないので、もし何かあれば後学のためにご教示ください。
宜しくお願い致します。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-06-27 12:52
引用:

早速のご回答ありがとうございます。
Web サーバ側で処理を実装するのは 「必須」なのですね。

もし宜しければその理由を教えていただけないでしょうか。



クライアントからのリクエストは信用してはいけないからです。
リクエストは簡単に改竄できるものです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-27 12:55
引用:

ハルシオンさんの書き込み (2007-06-27 12:18) より:

Web サーバ側で処理を実装するのは 「必須」なのですね。
もし宜しければその理由を教えていただけないでしょうか。
Webアプリケーションのルールのようなものなのか、JavaScriptで返した値などが信用できないケースがあるからなのか、じゃんぬねっとさんご自身の経験則からなのでしょうか。


一般論だと思っています。クライアントのブラウザで JavaScript が必ずしも有効になっているとは限らないからです。たとえば、エラーチェックなどの処理を JavaScript だけでやるのは論外ということです。理由はわかりますよね。

ただしこれに当てはまらないものもあると思います。たとえば見た目が派手になる程度であれば JavaScript を使うのは任意で OK だと思います。先の話は Web サーバ側ですでに処理がある前提で、アクセシビリティを良く (PostBack が発生しないように) するためにクライアント側でも同じ処理を実装しておくということです。(アクセシビリティの一言だけではわかりにくかったですね)

"計算を行う動作" とのことですが、ただこの結果をブラウザ上に表示するだけであれば、別に JavaScript で実装するのは構いません。ただし、その結果を Web サーバ側に送信したりしてはいけません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2007-06-27 13:06
クライアント側で計算した結果はあくまでも「ユーザーに見せるための物」であって、
サーバにそのまま教える物ではありません。

IE Developer Toolbar とか、Firefox の DOM Inspectorとかを使ってフォームやボタンのイベント処理を変更すれば、クライアント側での処理はどのように改変する事も可能です。
また、URLに直接パラメータを指定すればパラメータ値には任意の値を設定する事が可能です。

つまり、クライアントから送られてきた計算結果は「信用出来ない」と言う前提で受け取るべきです。

クライアントから送られてきた計算結果が1円ならあなたの会社はその商品の実際の価格が何円でも1円で売るというのなら私は止めませんけど。
ハルシオン
常連さん
会議室デビュー日: 2005/03/29
投稿数: 24
投稿日時: 2007-06-29 21:41
返信遅れて申し訳ありません。
ご回答ありがとうございます。

引用:


burton999 さん wrote:

クライアントからのリクエストは信用してはいけないからです。
リクエストは簡単に改竄できるものです。




おお!
確かにそう言われてみればそうですね!クライアント側の処理のとても基本的なことでした。
お恥ずかしい。ご指摘ありがとうございます。


引用:


じゃんぬねっと さん wrote:

ただしこれに当てはまらないものもあると思います。たとえば見た目が派手になる程度であれば JavaScript を使うのは任意で OK だと思います。先の話は Web サーバ側ですでに処理がある前提で、アクセシビリティを良く (PostBack が発生しないように) するためにクライアント側でも同じ処理を実装しておくということです。

"計算を行う動作" とのことですが、ただこの結果をブラウザ上に表示するだけであれば、別に JavaScript で実装するのは構いません。




具体的なご説明ありがとうございます。
頂いた回答で、仰る事のイメージが掴めました。

引用:

たとえば見た目が派手になる程度であれば



テキストボックスの色が変わったり、とかそのような動作ですよね。
重要な処理は必ずサーバで。JavaScriptで行うことはあくまで補助的なもの、ということですね。
いつもありがとうございます。

引用:


ひろ@ya さん wrote:

クライアントから送られてきた計算結果が1円ならあなたの会社はその商品の実際の価格が何円でも1円で売るというのなら私は止めませんけど。




たしかにJavaScriptだけで実装するとご指摘のようなことが可能になってしまいますね。
JavaScriptにこだわっていた訳ではないのでここまで伺えればもちろんサーバで計算を行います。

皆様、いつも貴重なご意見&知識をありがとうございます。
今後ともよろしくお願い致します。



Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-06-30 06:14
>たしかにJavaScriptだけで実装するとご指摘のようなことが可能になってしまいますね。
>JavaScriptにこだわっていた訳ではないのでここまで伺えればもちろんサーバで計算を行います。

サーバー側で行うのでしたら、Ajaxを実装したらどうでしょうか。Webページを部分的に更新できますので快適です。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集

スキルアップ/キャリアアップ(JOB@IT)