Query Object vs SQL Where句

ORMなどを利用した場合でも、QueryObjectを利用するよりもSQL Where句を直接指定したいという意見を良く聞く。
たしかにWhere句は柔軟なんだけれども、Query Objectを利用するとより抽象度が上がってより設計仕様を直接的にあらわすことができる。この利点を上手く使うと複雑な検索が多い業務アプリでQueryObjectの効果があがる。

たとえば、ある一定以上の貸出期間がたった貸出中の貸出と関連のある会員を検索する場合、この条件に対応する「会員貸出期間超Criteria」クラスを作成して利用することができる。このように作成されたクラスは通常の等号などの条件と同様に利用できる。検索条件の部品化ができると考えればよいか。

また、特定のドメインモデルを検索するための複合的な検索条件を表すためのクラスを作成する方法も有効で、汎用的なQuery Objectに対比して「型指定されたQuery Object」と呼ばれる。検索条件が複雑な画面を作成する場合、その画面の検索条件をそのままあらわすために利用される。

あと、Query ObjectはSQL文以外のC#などで実装した絞込みなども組み込める利点も大きい。