私はDataMapperのメンテナであり、複雑なレポートにはSQLを使用する必要があると思います。
いつかSQLのパワーと簡潔さを提供するDSLができると思いますが、これまで見てきたことはすべて、複雑なクエリに対してSQLよりも多くのRubyコードを記述する必要があります。同じ複雑な操作を説明するために、10〜15行のRubyコードよりも5行のSQLクエリを維持したいと思います。
複雑だと言っていることに注意してください。単純なものがある場合は、ORMの組み込みファインダーを使用してください。ただし、SQLがより単純になる線を越えることができると私は信じています。現在、ほとんどのアプリはレポートだけではありません。CRUDタイプの操作がたくさんあるかもしれませんが、ORMは完全に適しており、手作業で行うよりもはるかに優れています。
ORMが通常提供するものの1つは、アプリケーションロジックに対するある種の編成です。同じファイル内の各モデルに基づいてコードをグループ化できます。通常、コントローラーに埋め込むのではなく、複雑なSQLクエリを配置します。例:
class User
include DataMapper::Resource
property :id, Serial
property :name, String, :length => 1..100, :required => true
property :age, Integer, :min => 1, :max => 130
def self.some_complex_query
repository.adapter.select <<-SQL
SELECT ...
FROM ...
WHERE ...
... more complex stuff here ...
SQL
end
end
次に、を使用してレポートを生成できUser.some_complex_query
ます。このコードをさらにクリーンアップする場合は、SQLクエリをビューにプッシュすることもできます。
編集:上記の文の「ビュー」とは、MVCコンテキストでのビューではなく、RDBMSビューを意味します。潜在的な混乱を解消したかっただけです。