У меня есть критерий создания с использованием нескольких параметров с разбиением на страницы. Проблема, что у меня есть это, если можно повторно использовать код внутри и для других, создайте критерии, совершенно разные, witouth должен дублировать код. Я заявляю, что если у меня есть случаи createcriteria и вы хотите сделать те же «фильтры» на case2, вам не нужно дублировать код, унифицировать оба createCriteria не вариант Например, проблема, с которой я сталкиваюсь, - это то, что должен быть с разбивкой по страницам, а другим не нужно, и оба должны иметь доступ к отдельным полям, поэтому уникальным вариантом является создание двух одинаковых критериев создания, если я что-то не пропущу. Это пример, что случаи не менее чем на 90% с индексом для case2, и что было бы хорошим режимом для повторного использования кода?Множество критериев создания повторного использования кода grails
def cases = PpCase.createCriteria().list{
and{
if(limit){
maxResults(limit)
}
firstResult(offset)
order("mostRecentPaymentDate", "desc")
order("totalAmount", "desc")
if(params.admin_id){
eq("adminId",params.admin_id)
}
if(params.status){
eq("status",params.status.toUpperCase() as PpCase.Status)
}
if(params.date_from){
ge('dateCreated', Date.parse("yyyy-MM-dd",params.date_from))
}
if(params.date_to){
le('dateCreated', Date.parse("yyyy-MM-dd",params.date_to))
}
if(params.date_closed_from){
ge('closedDate', Date.parse("yyyy-MM-dd",params.date_closed_from))
}
if(params.date_closed_to){
le('closedDate', Date.parse("yyyy-MM-dd",params.date_closed_to))
}
}
}
def cases2 = PpCase.createCriteria().list{
and{
firstResult(offset)
order("mostRecentPaymentDate", "desc")
order("totalAmount", "desc")
if(params.admin_id){
eq("adminId",params.admin_id)
}
if(params.status){
eq("status",params.status.toUpperCase() as PpCase.Status)
}
if(params.date_from){
ge('dateCreated', Date.parse("yyyy-MM-dd",params.date_from))
}
if(params.date_to){
le('dateCreated', Date.parse("yyyy-MM-dd",params.date_to))
}
if(params.date_closed_from){
ge('closedDate', Date.parse("yyyy-MM-dd",params.date_closed_from))
}
if(params.date_closed_to){
le('closedDate', Date.parse("yyyy-MM-dd",params.date_closed_to))
}
}
}
Более реальный пример: В тех случаях, мне нужно несколько полей, но с ограничением, и в cases2 мне нужно разные поля, и witouth предел, I'm дублировании 90% кода.
def cases = PpCase.createCriteria().list{
projections {
sum("field1")
countDistinct("id")
}
and{
if(limit){
maxResults(limit)
}
//HERE SHOULD BE THE CODE THAT I NEED TO REUTILIZE
}
def cases2 = PpCase.createCriteria().list{
projections {
sum("field2")
countDistinct("id")
}
and{
//HERE SHOULD BE THE CODE THAT I NEED TO REUTILIZE
}
Да, пример такой же createCriteria, чтобы упростить вещи, но код немного отличается, делать разные проекции, а части, которые нужно повторно использовать, - это и {} условия createCriteria, я загружу пример –
. real –
В этом случае это просто небольшое изменение первоначального ответа; сохраняя ваше отдельно установленное закрытие «fetchPayments», просто назовите это закрытие как часть вашего построения критериев, где вам понадобятся два сценария. ' случаи DEF = PpCase.createCriteria(). Список { delegate.with fetchPayments /* Случаи 1 конкретные критерии здесь * /} Защиту cases2 = PpCase.createCriteria(). Список { delegate.with fetchPayments /* случаев 2 конкретных критерия здесь */ } ' – Poundex