OzStrutsという選択肢

Struts in ActionのおかげでStrutsというものが結構理解できた。これでやっとStrutsの述語を使いこなせるというもの。今までがいい加減すぎただけか。

Strutsがどれだけ素晴らしいかはよくわかったけど、実際のところそれで美しい設計でメンテナンスしやすいWebアプリが作れるかというと、やはりそうでもないみたい。ちょっとググッたらいかにstruts-config.xmlが複雑になりやすいか、メンテしづらいかがよくわかる。

それに、StrutsであってもうまくActionやActionFormの使い方を工夫しないと、例の直感的なURL体系を実現することは難しい。

と、そんなことを考えながら、ふと「ページドリブン」という単語が思い浮かんだわけです。Strutsってアクションありきで「アクションドリブン」とでも呼ぶような体系かなと。パスによってアクション指定でリクエストして、その後どのページが表示されるかはアクションのさじ加減1つだというイメージからそう思ったわけです。で、アクション指定じゃなくて、ページ指定(=URL)で設計/実装できないものかと。そんなところでふと思いついただけです。深い意味などありません。

気になってちょっとググってみたら、OzStrutsというStrutsアドオンに出会ったわけです。

「ページドリブン」というでっちあげ単語は一致したものの、それが表す内容は向こうのほうが何枚も上手でした。PRG(Post Redirect Get)なんて言葉も始めて聞いたし。

で、ひょんなことから見つけたこのOzStrutsですが、これをつかうとActionとActionFormの使い方がとてもきれいにまとまるようです。実際、サンプルのozjpetstoreのソースを見てみると非常にきれいにまとまっています。かなりよさげに見えます。

で、ずーっと固執しているURLですが、

http://localhost:8080/ozjpetstore/shop/アクションフォーム名/リスナメソッド名.do

という感じです。

詳しくは前述のサイトに詳しく書いてありますが、OzStrutsではActionFormをPageクラスとしてリスナメソッドをここに集めます。で、どのアクションフォームのどのリスナメソッドを呼ぶか、というのをURLのパスで指定するわけです。

個人的に末尾がリスナメソッドであることが結構重要だと思っています。

たとえば、HogePageが表示されているときにFooPageを開くためのURLは

http://................../HogePage/foo.do

のようになるわけです。つまりFooPageが開いているときのブラウザのURL欄がこれなわけです。末尾が「../foo.do」であるため、「ああ、FooPageを開くためにfoo.doなのか」と直感的に理解できるわけです。
まあ、「../HogePage/..」な部分によって、「どの画面から遷移してきたのか」という情報も残ってしまっているわけですが、それはまあOKな範囲でしょう。
PRGの観点からFooPage#foo()にあたるURLにリダイレクトするなどすれば、完全に痕跡なく

http://................../FooPage/foo.do

とできますし。


というわけで、今かなりの期待を持って試しているところなんですが、どうでますかね。

サンプルは OzStruts/Struts + Spring + iBATIS の組み合わせで実装されているので、これをSeasarプロダクトに置き換えて OzStruts/Struts + S2Container + S2Dao に変えて遊んでみようと思います。

S2OzStrutsみたいなアダプタがすぐ実現できるといいな。