ConditionBeanのスコープ

概要

DBFluteは、DBアクセスの大きな2つのやり方を提供しています。それはConditionBeanと外だしSQL(OutsideSql)です。これら2つの存在意義に関してはここでは割愛させて頂き、いざ実装するときにこの2つのどちらを利用すれば良いのかに焦点を当てます。

当然、「ConditionBeanでできないことは外だしSQLで」という正論に間違いはありませんが、プログラマがConditionBeanの機能を頭の中で全て抑えていることは少ないと思われます。そこで、素早く判断するための「判断の流れ」を紹介したいと思います。

判断の流れ

A. 明らかな外だしSQLか否かを判断

ConditionBeanのスコープを確認する前に、まずは「明らかに外だしSQLでやるべき」と言えるものを確認していきます。こうすることで、ConditionBeanを意識する前の早い段階で判断が可能です。

以下に当てはまるものは確実に外だしSQLです。

B. ConditionBeanのスコープを判断

そして、ConditionBeanのスコープからConditionBeanで実装できるか確認していきます。

「明らかな外だしSQL」を通り過ぎたこの時点ではConditionBeanで実装可能である可能性が高いです。実際にConditionBeanを実装しながらの確認でも構いません。後に「やはり外だしSQLで実装」となっても、そのConditionBeanの実装は無駄にはなりません。それは「C」において後述しますが、近いところまで実装したConditionBeanから外だしSQLの土台となるSQLが生成できるからです。

以下がConditionBeanのスコープです。

Select句
From句
Where句
OrderBy句
Union句
その他

C. やはり外だしSQLであると判断

ここまで来たら、やはり「外だしSQLで」ということになります。

ここで、ちょっとした「外だしSQL」の実装支援を紹介します。 もし、この時点でConditionBeanで近いところまで実装済みであれば、それは消してはいけません。以下の手順が可能だからです。

  1. ConditionBeanでできるところまでテスト実装
  2. ConditionBeanのtoDisplaySql()の戻り値をログに出力
  3. ログ出力されたSQL文を外だしSQLの土台として活用

このようにすることで、外だしSQLの実装にてSQLの構文やテーブル名、カラム名を1から書く必要はなくなり、スペルミスなどのケアレスミスもなくなります。また、判断の流れの中で実装したConditionBeanは全く無駄になりません。

但し、ConditionBeanのtoDisplaySql()は、「Java版でDBFlute-0.6.0から」、「C#版でDBFlute-0.6.7から」の機能です。