最近Strutsの複雑さといろいろな話について


良い機会なので、自分の考えもまとめようかなと思います。
まずですね、なんかヒートアップしてるけど、Strutsって
2002年くらいにCraig McClanahanが3週間とかで作ったフレームワークです。
だから、それなりに欠点もあるし、でも便利な点もある、
それでよいんじゃないかと思います(w ぶっちゃけ。
(Craig自身も3000行のJSPを書くのが嫌になってvacation中に
ちゃちゃっと作った、そう言ってました)
なので、まず冷静に〜^^;


で、本題。
今、現在ではStrutsには以下のようなメリットがあると思います。
 ・Javaでの共通的なフレームワークっていう考え方のパイオニア
  (良くも悪くもw) = 人を集めやすい
 ・Viewと実際のロジックの分離(全部じゃないけどw)
 ・クライアントサイド・サーバサイドのValidation機能
 ・ダブルサブミット対策用のToken機能
 ・taglib
 ・struts-configによる設定の一元化
 ・情報量の多さ
 ・Strutsのまずいところを補完するものも出ている
 (バッドシステム・グッドラッパーです)


しかーし、デメリットは以下のとおり
 ・テストしにくい(継承構造の強制)
 ・クラス数は多くなりがち。
 ・設定ファイルがでかすぎ
 ・初心者にはやっぱりわかりにくい(XML嫌いになる人多数w)
 ・taglibの使い勝手


まあたしかに一長一短だけど、個人的には圧倒的にテストしづらいのが
ぶっちぎりですが。もともとのつくりのせいでテストしづらいって
そりゃあ工数に響くし、いやですねえ〜、実際。


設定ファイルの肥大化は、分割できるように
なったし、まあいいかって言う人もいますね、この辺は好みかなあ〜。
おいらは嫌ですけども。つべこべ言わずにこれだけで動け!!!みたいな感じ。


また、よくもわるくもパイオニアになってしまったので、
営業サイドから人を集めるときに、
「とりあえずStrutsできる?」っていう判断をする人も多いですね(www
そしてJavaフレームワークといえばStrutsみたいなw
これが大規模開発をStrutsでの真実かなあと、ちょっと思ったりw
ちなみに半年くらい前に言われたのが、「JSFってStrutsでしょ?」(笑)って。。。orz


ああ、横道にそれた。。。戻ります。
Strutsは、後続FWに多大な影響を与えたってのも真実だと思います。
いやいやいやって言う人もいるかと思いますけど。やっぱり
ベンチマーキングとか機能的にって言った場合に、Strutsより
良くならないと使って頂くには厳しいですよね。
例はいくつもありますね、JSFもしかりだし。


で、Strutsは問題の複雑さを隠しただけで本質的には何も解決していない、
これも自分は事実だと思っています。でも、良く考えてみれば
複雑さを隠してユーザーの全体的な記述量が減るならそれでよいとは
思いますが、Strutsstruts-configはそうはなりませんでしたね、
残念ながら。


ちなみにRuby on RailsはConvension over Configurationという
概念をもたらしました(もしかしたら昔からあったのかな?)。
問題の本質的な解決という意味では、RoRの、細々とすべて設定するよりも
規約に則っとれば設定完了、この方が問題解決につながっていると思っています。
手前味噌(?)で言えば、SeasarファウンデーションS2StrutsもCoCを採用しているので
Strutsピンよりも本質的な問題解決はしてるんじゃないかなと思います。
S2Strutsは本当に良くできている、そう思っています。


ああ、そうか、書いてて思いました。
「本質的な問題解決」、そういう難しい言葉を使うから
しっくりこないのかも。だってユーザーからすれば、
「本質的な問題解決?何それ、もっと3秒くらいでわかるように
言ってくれない?」ですもんw


そうかそうか。となると、、、
「全体的に記述量(設定&コード)が減る」
「直感的にユーザーがわかる」
そういう方が大事ですね。自分で納得しちゃった。


まあ結論として、Strutsは複雑、それはある程度真実です。
でも学ぶべきところはあって、良いところを吸収している良い
フレームワークが出てきています。その「吸収の仕方」には
さまざまな形がありますが、今でも影響を与えているフレームワークとして
よりユーザーに直感的にわかって、全体の記述量が減るような
フレームワークのひとつの土台になった、そういう解釈で良いのでは
ないでしょうか?


そして、Strutsが出てきてからもう4年(かな?)経ちます。
そろそろJavaフレームワークも次のレベルにあがる必要があって、
じゃないと他の言語の良いものに抜かれてしまいますよ、まあ
端的に言うとそういうことかなと。ASP.NETRoRとかね。
Javaの中でも、JSFTeeda含むw)、S2Struts
Shale、Tapestry4、Clickとかね。


こう俯瞰してみても、とっても面白いですね。
そういう中で良いプロダクトを作って提供していきたい、
改めて思うようになりました^_^