基本機能の実装だけを考えていて仮リリースしたシステムなのだが、後回しにしていて必須入力チェックの実装を忘れていた。
最初から実装していないため実装に無理が出た、昔担当したシステムでは、入力画面→確認画面→登録実行という流れにおいて、確認画面の前に入力チェックをサーバサイドで行い、必須項目が書けたりした場合は登録実行に進めないようにしていた。
しかし、手抜き?で設計を充分にしていない今回のシステムではこの「確認画面」にあたる部分がない。入力→結果表示になっている。新たに画面を増やすのは可読性の低下を招くか、今までのものを捨てて作り直すかになる。捨てるのは時間的に厳しい。
ということで、登録実行の前に入力チェックを行い不備があれば前の画面に戻してエラーメッセージ表示、という流れを考えた。
チェックの実装はそれほど問題ではなかった。登録処理の前に条件分岐を追加してチェックすればいいだけだ。問題はここで「不備あり」となったときの画面制御。入力データはPOSTで飛んできている。これを用いて別画面に飛ばすとなるとGETでパラメータを埋め込むのが早い。しかし、データ長に制限のあるGETでは可変長データを扱う場合に問題になる。
そこで、POSTで得たデータを次の画面に向けてPOSTで投げることを考えた。しかし、POSTでデータを投げるのは簡単ではない。Web上での情報で方法はわかり、画面遷移にも成功したが、データの受け渡しは簡単ではなく、またセッション情報の受け渡しも自前で実装しなければならないなど問題があった。
そこで、セッションを使うことにした。今まで使っていなかったのが不思議なのだが、データを保持して画面遷移を繰り返す動きがなかったので使っていなかった。セッションで入力データを受け渡して入力画面にエラーメッセージつきで戻すことに成功した。前回は全く思いつかなかった基本的な方法だ。
後付なので完成済みの基本機能への影響を最小限にしておくため、セッションはこのエラー処理での画面遷移時だけに限定し、正常処理が続行するときにはクリアすることにした。問題がなさそうだ。
今朝の出勤時に電車の中で考えていたのはJavaScriptでの実装の追加だったのだが、入力に使う項目を動的に制御しているため、その制御部分に必須チェック用のパラメータを追加し、また動的にScriptを出力する必要も出てくるため見送ってしまった。小規模な社内システムならではの手抜きか?大規模システムだとサーバ負荷の問題も出てくるからできることはクライアントサイドで、ということも出てきてしまうだろうが。
運用しながらブラッシュアップ・機能追加していける環境なのでつぎはぎな修正をしている。ただし、スパゲッティなソースにはしないよう気をつけている。
コメント