- PR -

ASP.NET CustomValidator と XMLウェブサービス(非同期)の組み合わせ

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-05-19 22:16
引用:

Kさんの書き込み (2008-05-19 10:18) より:
引用:
-------------------------------------------------------------------------------
ご希望の動作は、一見便利そうです。
では、こうなったらどうしましょう?
-------------------------------------------------------------------------------

登録処理実行直前にもう一度チェックを行うつもりでした。


そこで止まると、ちょっとなぁ。。。

 入力したときにエラーにならなかった。顧客は当然、「登録できるものだ」と思います。しかし、登録しようとしたらエラーになった。「どうして?さっきエラーにならなかったじゃない!!」と思わないでしょうか。
だったら、エラーが出るタイミングは1カ所でいいのではないでしょうか。

 副次的に、プログラムはシンプルになりますし、エラーを作り込む機会も減ります。テストも少なくなります。
K
会議室デビュー日: 2008/05/16
投稿数: 6
投稿日時: 2008-05-20 09:39
書き込みありがとうございます。

Jittaさんの書き込み(2008-05-19 22:16)より引用:
-------------------------------------------------------------------------------  入力したときにエラーにならなかった。顧客は当然、「登録できるものだ」と思います。しかし、登録しようとしたらエラーになった。「どうして?さっきエラーにならなかったじゃない!!」と思わないでしょうか。
だったら、エラーが出るタイミングは1カ所でいいのではないでしょうか。

 副次的に、プログラムはシンプルになりますし、エラーを作り込む機会も減ります。テストも少なくなります。
-------------------------------------------------------------------------------
確かに上記の場合だと、利用者にとっては「え?なんで?」とかなってしまいますね。
ただ、利用者側の使い勝手の向上に重点を置くと利用者が項目を入力/選択した時点での検証は魅力的かな、と。

そこでちょっと工夫(というほどのものでもありませんが)を凝らして、登録処理実行前のチェックでエラーになった場合は表示するエラーメッセージを例えば、

「入力されたIDはお客様が入力中に他のお客様がご使用になられてしまいました。
 申し訳ございませんが、他のIDをご入力お願いいたします。」

のように変えるなどすればある程度カバーできるのかな、と思いました。

ある程度割り切ってしまったほうがいいのか、とことん利用のしやすさを追求するのか、線引きが難しいところですね。

もちろん、納期が迫っていたりすればある程度割り切ったほうがいいのかもしれませんが(苦笑

ご意見、参考にさせていただきます。
ありがとうございました。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2008-05-20 10:49
よくある、希望IDとパスワードと氏名と住所と○○と○○と・・・を入力させてボタンクリックで
確認画面に遷移するやつですかね。yahooが似たタイプなので試してみました(yahooは確認画面ないんですね)
案の定、「登録可能なIDです」と出たにもかかわらず、登録時に「既に登録されています」とでました。

要は、(1)入力時に重複することと、(2)登録時にタイミングの問題で重複すること、の
頻度から仕様を決めればいいと思います。(1)が殆ど起こらないとか(2)がバンバン起こるなら
(1)でのチェックは要らない気がしますし、(1)はしばしば起きても(2)はレアケースとかなら
(1)でのチェックは便利だと思います。

「さっきエラーにならなかったじゃない」と思わせないようにする方法として
チェックにひっかかった場合のみメッセージを表示し、引っかからなかった場合は
チェックしたことを意識させない(何も表示しない)というのはアリな気もします。

個人的に、登録しようとしたとき(または確認画面に行こうとしたとき)「先にチェックしてください」
みたいにいわれるのは不便に思います。「だったら今の瞬間にチェックしてよ」って思います。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-05-20 12:06
引用:

Jittaさんの書き込み (2008-05-17 21:56) より:
ご希望の動作は、一見便利そうです。

では、こうなったらどうしましょう?

あ:「データ」を登録しようとしている。
  →問い合わせたところ、データはなかった。
い:「データ」を登録しようとしている。
  →問い合わせたところ、データはなかった。
  →登録した。
あ:登録した。
  →"い"が登録したデータと、重複してしまう。



問い合わせて重複がないことがわかったら、その時点でIDを予約しちゃえばいいのかな、と思いました。
これはこれでいろいろと手間がかかりそうですが。
K
会議室デビュー日: 2008/05/16
投稿数: 6
投稿日時: 2008-05-20 13:31
書き込みありがとうございます。

引用:
べるさんの書き込み(2008-05-20 10:49)より:

要は、(1)入力時に重複することと、(2)登録時にタイミングの問題で重複すること、の
頻度から仕様を決めればいいと思います。(1)が殆ど起こらないとか(2)がバンバン起こるなら
(1)でのチェックは要らない気がしますし、(1)はしばしば起きても(2)はレアケースとかなら
(1)でのチェックは便利だと思います。


(2)はほぼレアケースと想定しています。
(1)のチェックについても本チェックというわけではなく、あくまで利用者が情報を入力する時点での入力補助程度と思っています。

引用:
rainさんの書き込み(2008-05-20 12:06)より:

問い合わせて重複がないことがわかったら、その時点でIDを予約しちゃえばいいのかな、と思いました。
これはこれでいろいろと手間がかかりそうですが。

IDの予約については最初考慮しましたが、やはりブラウザを利用したWebアプリである以上、ブラウザの閉じるボタンなどで急に閉じられると予約したIDが宙ぶらりんになってしまう、など問題点が多々あることで断念しました。
他サイトへの移動やブラウザの閉じるボタンを制御することで対処できそうですが、やはり「手間」がかかりそうですね。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2008-05-21 05:53
データベースの排他制御に

・楽観的ロック
・悲観的ロック

の2種類ありますが、これと同じような考え方でよいのでは。

システムの要求仕様が楽観的ロック、悲観的ロックのどちらを要求しているのか。

今回の場合は、楽観的ロックでよいような気がします。

つまり、IDを予約しないで登録時に重複のエラーが発生したときは
ユーザーフレンドリーなメッセージを表示して再試行してもらう。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集

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