明日のために

RDBへアクセスするJDBC周りのコーディングについてちょっと考えてみた。テーマはズバリ「開発効率向上」。それならORMで決まり、という香具師も多いと思うけど自分は非ORM派(アンチORM)。そもそもJDBCで開発効率を落としている主犯は、

ResultSetをJavaBeans(POJO)へ変換する部分

だと思う。プログラムで記述するRBDアクセスの大半、あるいはそれ以上を占めるのは検索(SELECT文)。その箇所ごとにこれを書くのは非常に面倒。ORMはこれを自動化してくれるし、永続化の仕組みは便利だと思う。しかしこの目的を達成する手段として考えた場合、ORMは巨大で複雑杉。使えるようになるまでのコストは誰が負担するんだ?

もう一つの理由は、自分がSQLに慣れているせいだと思うけど、SQLレスという点ね。なんでSQLを隠蔽しようとするんだろうね?SQLを使えば処理の要件を宣言するだけで済む。その要件(=SQL)を満たすための実際の処理はRDB側が考えてくれる。こんな便利なものはない。もちろん(N+1)問題で頭を悩ます必要もない*1。それを解決するためにORMの擬似SQLと格闘するくらいなら、正真正銘ISO謹製SQLを覚えたほうが、後々つぶしが利くと思うけど。

「アレ」を使えば上記の問題は解決する。だからORMは要らない。しかし気になる点は残る。それはロングタームトランザクションのこと。ORMの持っているメカニズムは大雑把杉。技術的には明確なことだから、プロジェクトのコーディングルールとしてメンバーに徹底する、コードレビューをきっちり行う、とい人間系の解決策しか無いと思う。つーかそういう準備もせず、なし崩し的に開発へ入るから、システムテストで破綻するんじゃないのかね?

*1SQLでも(N+1)問題を引き起こす香具師がたまにいるけど、その場合はメンバーから外すなり、ドナドナ元に引き取りを依頼する。