У меня довольно большое закрытие критериев в приложении Grails, и я хотел бы повторно использовать его в нескольких местах в моем приложении. Вместо того, чтобы дублировать раздел, мне нужно повторное использование, я хотел бы определить это как отдельное закрытие и ссылаться на него везде, где это необходимо, но я немного борюсь с синтаксисом.
Это упрощенная/вырезанная версия, но по существу мои критерии выглядят примерно так:
def criteriaClosure = {
and {
// filtering criteria that I'd like to reuse in lots of places
or {
names.each { name ->
sqlRestriction(getFilteringSql(name), [someId])
}
}
if (isOrganisationChild(childDefaultGrailsDomainClass)) {
sqlRestriction(getFilteringSql(domain), [someArg])
}
// filtering criteria that specific to this particular method
sqlRestriction(getSomeOtherSql(), [someOtherArg])
}
}
def criteria = domain.createCriteria()
def paginatedList = criteria.list([offset: offset, max: max], criteriaClosure)
Я попытался определить часть закрытия, которую я хочу повторно использовать в качестве переменной, и ссылаясь на нее в моем закрытии критериев, однако ограничения, которые она определяет, похоже, не применяются.
def reusableClosure = {
and {
or {
names.each { name ->
sqlRestriction(getFilteringSql(name), [someId])
}
}
if (isOrganisationChild(childDefaultGrailsDomainClass)) {
sqlRestriction(getFilteringSql(domain), [someArg])
}
}
}
def criteriaClosure = {
and {
reusableClosure() //this doesn't seem to work
sqlRestriction(getSomeOtherSql(), [someOtherArg])
}
}
Я уверен, что это должно быть довольно простой задачей, поэтому извиняйтесь, если это глупый вопрос. Любые идеи?