我需要更好的解決方案爲下面的代碼塊,更好地滿足DRY原則。是否有辦法在每個閉包中處理運算符<,...,> =作爲變量?封閉變量,以避免多個if
def query
if (wvOp == ' ')
query = Notiz.where {
notiztext =~ "${params['notiztext']}" &&
referenz =~ "${params['referenz']}"
}
if (wvOp == '<')
query = Notiz.where {
notiztext =~ "${params['notiztext']}" &&
referenz =~ "${params['referenz']}" &&
anlagetermin < wiedervorlage
}
if (wvOp == '<=')
query = Notiz.where {
notiztext =~ "${params['notiztext']}" &&
referenz =~ "${params['referenz']}" &&
anlagetermin <= wiedervorlage
}
if (wvOp == '=')
query = Notiz.where {
notiztext =~ "${params['notiztext']}" &&
referenz =~ "${params['referenz']}" &&
anlagetermin == wiedervorlage
}
if (wvOp == '>')
query = Notiz.where {
notiztext =~ "${params['notiztext']}" &&
referenz =~ "${params['referenz']}" &&
anlagetermin > wiedervorlage
}
if (wvOp == '>=')
query = Notiz.where {
notiztext =~ "${params['notiztext']}" &&
referenz =~ "${params['referenz']}" &&
anlagetermin >= wiedervorlage
}
query.findAll()
彼得 多特蒙德,德國
如果你願意放棄'where'查詢(類型安全的好處,編譯時檢查,'DetachedCriteria'等),那麼下面關於使用標準查詢的建議可以工作。如果你想要'where'查詢所提供的好處,那麼你可以擺脫所有的重複,如下面的答案所示,但是你不能擺脫單個的布爾表達式。這就是處理「where」查詢的本質。與標準查詢不同,標準的結構在編譯時必須是可知的。我希望有所幫助。 – 2014-10-02 19:43:16