谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

JdbcManagerで生産性10倍ってさー。

http://s2container.seasar.org/2.4/ja/s2jdbc_abstract.html

タイミング的に、今しか言えなさそうなので。

生産性を10倍以上高めることを目標として

何をもって10倍と言うのか、、、と思ったんだけど、

何に比べて生産性が10倍かというとJava標準のJPA(Java Persistence API)に対してです。

相手が悪い。
JPAと比べてどうするのって思う。
(マネージメント層の説得のために、JPAと比べたいのかも知れないけど)


JPAと比べるせいで
「やっぱS2Dao捨てちゃったんだ」って思うのが、私の感覚。


S2Daoの問題を見直して、S2Daoに比べてこれだけ生産性を高めた」
って言ってくれる方が、S2Daoのノウハウが積み重なった感じがして、嬉しいんだけど。


■INSERT/UPDATE/DELETE系
S2Daoでは分かりづらかった命名規則がなくなった分、
良くなったと思う。素直に嬉しい。
ハマらなくなったし、調べなくて良くなった。


■ストアドの呼び出し
jdbcManager.callBySql("{? = call myproc(?, ?)}", dto).call();
さすがに、これはダメだろー。
生でストアド呼び出してるのと、変わんないじゃん。
(実際そうなんだろうけど)


「?」の数の間違いを検出してくれる機構よりも、
S2Daoと同じ感覚で、
jdbcManager.callProcedure("myproc", dto);
jdbcManager.callFunction("myproc", dto);
ぐらいで、呼び出し文を構築してくれる方が分かりやすい。


だって、「?」の数は間違うことはあっても、
Dtoに記述したIN/OUT/IN_OUTは間違わないから、きっと。


あと、個人的には、stored functionは
「return_OUT」を、「戻り値」にした方が、
分かりやすいと思うんだけど。
戻り値にできない(or したくない)理由って何かあるのかな?


■検索系
多分、今回の目玉だろうけど、
肝心のこれで、生産性が上がると思えないんだよね。


> 90%のSQLを自動生成する

自動生成と言っても、JavaSQLを書くんでしょう?


私は、このJavaSQLが、いまだにダメで。
新人の時に、Hibernateで大失敗して以来、トラウマで(←自分が悪いw)


要は、SQLも分からんのに(SQLドリルが終わってないレベルで)
Javaでホイホイ作ってると、とんでもない実装しちゃうじゃん?


別に、SQLドリルをちゃんと終わっていて、
JdbcManagerが吐くSQLをきちんとイメージしながら作っていれば
間違わないと思うよ?
でも100人開発者集めて、開発をスタートさせたら、
そういうわけにはいかないよね?


だから、limit(10).offset(100)を書かせる。
だから、SQLを書かせる。


どっちにすべきかは、よく考えなきゃいけない。
いまの私の考えだと、後者かな。


あと、SimpleWhereみたいなJavaSQLって、
たぶん、高速に書きたい or 高速にリファクタしたいがために
JavaEclipseを活かして書くってことだよね?


私自身、高速リファクタの恩恵を受けた経験がないから
まだ良さに気付いていないだけかも知れないけど。


それでも、
SimpleWhereを書くぐらいなら、素直にSQLを書いた方が
SQLをきちんと理解できるし、何より、レビューしやすいと思うんだけどね。


■レビューできない
そうなんだよね、
JavaSQLのソースなんてレビューできないんじゃん。
生のSQLを見なきゃ、レビューできないじゃん。
少なくとも、私の右脳は、JavaSQLから問題を発見できない。


ソースコードを右クリックしたら、SQLが表示されるEclipseプラグインとか、
JdbcManagerの呼び出し箇所を検出して、全てのSQLを表示してくれるツールとか、
そういうのがなきゃ、レビューできない。
(そんなツールが構想に入ってないようだったら、作るよー!)


で、レビューした結果NGだったとして、
それをJavaSQLでどれだけ簡単に修正できるかも、まだよく分からない。


この辺りは今後評価していきたい。