2004年01月08日

あーもーなんか疲れたよ。正月明け。
やっちまった。完璧俺のミス@設計。

このページを見てる人がどれだけWebアプリケーションの開発に
携わってるかわからないからはっきりいって全く無意味かもしれないんだけど、
どんなミスをしてしまったのか説明してみようと思います。

ってか会社の奴でこのページ見てるやついる?
もし打開策しってる奴がいたら掲示板に書き込むかメールちょうだいね。

・メニュー画面で”ほげほげ登録”リンクを押下します

・『最初の入力ページ』で”ホゲホゲID”を入力して、さらに次の登録画面へ進みます

・『2ページ目の入力ページ』で”名前”,”住所”,”職業”を入力して登録ボタンを押します

・『2ページ目の入力ページ』で入力した”名前”が不正だったので、
自画面(『2ページ目の入力ページ』)にエラーメッセージをだします

・『2ページ目の入力ページ』で問題なければ登録結果画面を表示します

以上が簡単なシステムの概要だとします。
今回問題となるのは”戻る”ボタンです。
僕は設計段階で、全ページの全”戻る”ボタンを
JavaScriptのhistory.back()で実装しようと思っていました。
では、上記画面での”戻る”ボタンはどうでしょう。
『2ページ目の入力ページ』の”戻る”ボタンの仕様は以下の2つです。
〓.『最初の入力ページ』に遷移する
〓.入力した”ホゲホゲID”がテキストボックスにプリセットされていること
ここまでは、問題ありません。history.back()で戻れば
『最初の入力ページ』には”ホゲホゲID”がセットされた状態で表示されます。

しかーし。登録ボタンを押下した際にエラーがあがった場合はどうでしょう。
自画面にメッセージを出力するわけですから、
当然呼ばれたActionは自画面に遷移するように実装するはずです。
んじゃ、ここで”戻る”ボタン押したら・・・?
⇒ただのhistory.back()ですから。
エラーメッセージのない『2ページ目の入力ページ』に戻るだけです。
仕様の〓.も〓.も両方満たしてましぇん。
どうすりゃ解決できるか考えました。
〓.画面の入力情報をセッションに保存する&Actionでどの画面から呼ばれたか
  によって、セッションから取得するかしないか判断させる
  (セッションから or DBから取得するという風に実装しなきゃいけない画面もある)
   今回の場合だと、
   『最初の入力ページ』の情報をセッションに保持しておく。
   『2ページ目の入力ページ』の”戻る”ボタンが押下された場合、
   『最初の入力ページ』を表示するActionを呼んで表示させる。
    ※『最初の入力ページ』を表示するActionは、
    『メニュー』から呼ばれたのか『2ページ目の入力ページ』から呼ばれたのか
    によって処理を分岐させなきゃなんない
⇒ただでさえ遅れてんのに、工数的に全画面でこんなことやったらまずいでしょ・・。
〓.お客さんが使う手順書に、「エラーがあった場合には
  “戻る”ボタンを2回押して戻ってくださいね♪」って書いちゃう。
⇒10回も20回もエラーだされちゃったらその回数分”戻る”ボタン
 押してもらわなきゃじゃん・・・。ってかその前にシステム屋的に
 そんなみっともねぇもん納品できねぇべよ。。

〓.JavaScriptのhistory.go(パラメータ)を使う。
  このパラメータに”-エラー回数”ってかんじでわたしてやれば戻れる。
  例えば3回エラーがあったら、history.go(-3)。

⇒そのパラメータに渡す数字をどこで持つの?HIDDENで保持?
 さらにシステム的には500回も600回もエラーだされた場合に、
 ちゃんと戻れることを保証してなきゃいけない。
 ”戻る”ボタンごときでアベンドするようなもんじゃしょうもないですし。。

あーまじ悩ましいですわ。今んとこ〓.のhistory.go()で行こうか?ってことになってる。
プロジェクト管理の品質管理担当者はお客さんに頼んで〓.でもいいってしてもらえばいいんじゃないの?って言う。
でも先輩達はやっぱそんなみっともないことしたくないって。俺もそう。
昔やってたシステムは〓.みたいな処理を実装してた。

そもそもの発端は、お客さんに「全体的に”戻る”ボタンつけてもらえますかねぇ〜」って言われて
なんも考えないで、「わかりました〜、今度ボタンつけたHTMLの画面イメージ持ってきます〜」って
言ってつけちゃって。
“戻る”ボタンはJavaScriptのhistry.back()を使用。
って書いて、画面イメージにもばっちり”戻る”ボタンつけて、
1.0版の基本設計書を納品してしまった、と。

ちなみにエラーメッセージを自画面に出すってのも、
QA票で画面イメージ貼っつけて「こんな感じで自画面に出力させますがいいですか?」
ってやったのは、この俺。
これが別ウインドウとかだったらまた話は別だった・・・。

結果として、俺は、細部まで検討しないでいい加減な設計をしてしまった。
自分の言ったことの責任自分でとれないようじゃしょうがないし。
結局自分のケツも自分でふけないんじゃ、SEだからとか会社員だからとか
そういう次元の話じゃないもんね。。嗚呼。。。。正直凹んだ。。
ただ、凹んでる暇もなく、親クラス(プログラマがリクエスト固有の
ビジネスロジックだけ組み込めばいいような形にするためのアブストラクトクラス)の設計、製造。
クラス図やシーケンス図の作成。いろんなミーティングやらレビューやら。

帰ったら、カップラーメン食って、エロビデオ見て、風呂入って、寝る。みたいな。今はそんな感じだ。

コメント

タイトルとURLをコピーしました