会社のとある研修で

画面間の引継ぎ情報の設計どうする?っていうネタ。


クライアントでhiddenで持つとか。
サーバー側で持つとか。
データベースで持つとか。


新人の頃のプロジェクトでは、クライアントで持ってました。
2〜3年目の頃のプロジェクトでは、データベースで持ってました。
最近やってるPJでは、クッキー+サーバー側で持ってます。


冗長構成でフェールオーバーなんていう、セッションレプリケーション
サーバーとして、そういう仕掛けを持ってたりするので、
それ使っちゃうのが一番楽チンだ、とか。


ワークショップやってて面白かったところ

  • -

① 一覧画面→詳細画面→「キャンセル」ボタンで一覧画面に戻す


 一覧画面は1〜50件まで、51〜100件まで、、
 なんていう風な制御になってるとして。


 「キャンセル」ボタン押されたら、どうやって戻す?っていう。


 ・データベースにもう1回取りにいく
 →その間にデータベースの件数の増減の影響を受けて、
  例えば50件目のレコードを選択してたとしたら、
  それが51件目になってしまったら、そのページに自分が選択した
  レコードは表示されていない
  ⇒夜間バッチでしかデータベースの情報が変わらないようなものだったら
   いいのかもしれないですけどね。
   あとは、必ず1ページ目(1〜50件)に戻すようにする、とか。


 ・キャッシュに持つ
 →50件分くらいだったらよくね?
  ⇒キー情報だけキャッシュに持たせて、
   画面表示情報はその時に取得させるような仕掛け作れば。

  • -

② 同一プロセスで複数画面(タブとかCtrl+Nとか)対応


 何もしないと後勝ちになってしまう。
 [画面1]で数量が2。
 [画面2]で数量が1。
 [画面2]を表示したのが後だとして、
 でも登録ボタンを押したのが[画面1]だったとすると、
 オペレーションした人は数量は2だと思ってるのに、
 実際登録された内容は数量1っていう。


 ・登録ボタンを押す画面表示にIDを付ける
 →登録ボタンがある画面を表示するときにIDを振って
  それをセッションに保持してから
  クライアントにレスポンスを返す。
  クライアントはhiddenフィールドにそれを保持して
  登録ボタンが押されたら、hiddenフィールドからリクエストされたIDと
  セッションのIDが一緒じゃなかったらダメ。
  ⇒ブラウザの戻るボタン禁止令?


この1年半くらい、ほぼバッチばかりやっていたので。
久しぶりにこういうこと考えました。


Amazonとか、どうなってんだろうって。
こういう仕掛けは自力で考えるのもいいですけど、
どこでも似たようなことやってるんだから、
それに従っちゃうのが一番なのかな、、と思うのですが。。