Query Object は、それ自体を SQL に変換できるオブジェクトです。 このオブジェクトによって、SQL も、DB のスキーマ定義も抽象化され、それらの変更が実装とは分離されます。また、そもそもとして SQL に詳しくない開発者が、よりフランクに DB からのデータ抽出を記述できるようになります。
構築するのが結構難しそうだなぁとは思ったんですが、以下のようなものも query Object で備えられるものとのこと。
- 複数の DB の方言を吸収する
- 一度構築したクエリについては結果をキャッシュしておいて、同一のクエリを構築することになったときはキャッシュから結果を返す
とにかく複雑なパターンなので、PoEAA では以下のように言っています。
Query Objects are a pretty sophisticated pattern to put together, so most projects don't use them if they have a handbuilt data source layer.
My inclination is that you’re almost always better off buying a tool.