Grailsには、「osによる統計の計算」や「ブラウザによる統計の計算」のような2つの非常によく似たメソッドがありますが、事実上両方を準備してからDBで同様のクエリを実行し、方法が異なる部分だけは、彼らは私の方法の真ん中に実行クエリです -Groovyで別のクロージャを追加できますか?
def summary = c.list {
eq('browser', Browser.get(1)) // OR eq('os', OS.get(1))
between('date', dates.start, dates.end)
}
それをリファクタリングするための理想的な方法としてクロージャの最初の行に渡すことであろうと私に起こりましたメソッドパラメータ。 Like
doStats (Closure query) {
...
def summary = c.list {
query
between('date', dates.start, dates.end)
}
}
私はこれを試しましたが、「クエリ」は無視されます。代わりにquery()を試しましたが、クエリ句が定義されている場所で実行されるため、これはどちらでも動作しません。私はパラメータとしてクロージャ全体を渡すことができると思うが、それは間違っているようだ - クエリーも将来もっと複雑になるかもしれない。
誰でも良いアイデアはありますか?
ありがとう私は名前付きクエリのアイデアが好きです。皮肉なことに、それを使用して私はきれいなコードで終わることはありません。 doStats(Long domainId、Stringオブジェクト){ if(オブジェクト== 'ブラウザ'){ Stats。ブール値を使用することはできますが、基本的にはインライン条件クエリで直接渡されたLongとStringを使用して同じ結果が得られます。 – Fletch