다음 코드 블록에서 DRY 원칙을보다 잘 충족하는 더 나은 솔루션이 필요합니다. 각 클로저에서 연산자로 <, ...,> =을 처리 할 수있는 방법이 있습니까?클로저에서 변수가 여러 개인 경우를 피하기 위해
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' 쿼리가 처리되는 방식의 성격입니다. 기준의 구조는 기준 쿼리와 달리 컴파일시 알 수 있어야합니다. 도움이되기를 바랍니다. –