redirect の 落とし穴

これだけ構造化された環境を使っていても、スパゲッティにはなるんだなと、痛感。

後から「画面リンク」を追加した。「この場合には、AではなくBの画面。」その実装は redirect で容易にできるけれども、問題は post されたパラメータの扱い。本来、AもBも、独立したView(コントローラ)を書いていて、閉じた動作としてはうまく行くのだけれど、AからBにリダイレクトした場合、引き連れてくる post のパラメータはBのものなのに、AのViewが呼び出される。if / else の条件分岐がいくつか重なった場合、 Aの Viewで Bのパラメータの処理が漏れてしまうバグを、ようやっと見つけた。今更・・・

特に組み合わせの多い部分だったため、完全な見落とし。網羅テストだから見つけた感じか。しかも、「存在しない」パラメータを要求して「サーバエラー」画面を出してしまう、というオマケまでついていた。orz

つくづく思う。作り始める前の綿密な仕様確認は、絶対に必要。蟻の目と鳥の目、自由に行き来できればいいのに、なんて思うけれど・・・両方欠かせない。それなのに、どちらかに偏りがち。

少しでも構造をスッキリさせようと、パラメータの持たせ方を変えた。その作業での見落とし、でもあるのかなぁ。これも玉突き事故か。

if / else で対応する以前に、こうした実装にならないように考え抜いて始めないといけなかったんだよな、と・・・でもね、昔は、Basic でも アセンブラでも、if / elseの塊だった訳だから、やり方はあるはず。ひたすら根気。とにかくテスト。きっと、収束するはず。