多个创建条件重用代码

里卡多(Ricardo Umpierrez)

我有使用带有分页的多个参数的创建条件。我要解决的问题是,是否有可能在内部重用代码,而对于其他创建标准则完全不同,而不必重复代码。我想说的是,如果我有case createcriteria并想对case2做相同的“过滤器”而不必重复代码,则不能将两个createCriteria统一起来每个实例,我面临的问题是需要具有分页功能,而其他功能则不需要,并且两者都需要访问不同的字段,因此唯一的选择是在我不丢失任何内容的情况下创建两个相同的创建条件。举个例子,案例与案例2的比例至少为90%,那么重用代码的最佳方式是什么?

 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))
                }
        }
}

更真实的示例:在某些情况下,我需要一些字段,但是有一个限制,而在case2中,我需要不同的字段,在没有限制的情况下,我要复制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。

Closure fetchPayments = { 
        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 cases  = PpCase.createCriteria().list(fetchPayments)
def cases2 = PpCase.createCriteria().list(fetchPayments)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在多个设置中重用代码

来自分类Dev

在Android上创建多个preferences.xml文件时,如何重用代码?

来自分类Dev

在Android上创建多个preferences.xml文件时,如何重用代码?

来自分类Dev

JavaScript代码优化-创建可重用的类

来自分类Dev

广告代码的多个if条件

来自分类Dev

如何使动画代码可用于多个类-可重用性

来自分类Dev

在jinja2中的多个地方重用代码块

来自分类Dev

在多个应用程序之间重用angularjs代码

来自分类Dev

可以在多个查询中重用CQLinq代码吗?

来自分类Dev

Swift-多个URL请求-重构和重用代码

来自分类Dev

跨多个组件的可重用模板/ html代码段

来自分类Dev

在多个不同站点上重用Python Flask代码

来自分类Dev

在多个页面中重用ASP.NET代码

来自分类Dev

在多个项目中重用Python代码的首选方法是什么

来自分类Dev

可以在多个查询中重用CQLinq代码吗?

来自分类Dev

如何在多个枚举名称中重用代码?

来自分类Dev

重用多个存储库条件的最佳方法是什么?

来自分类Dev

如何在iOS中创建可重用代码?

来自分类Dev

创建浏览器无法解析的HTML代码(以供重用)

来自分类Dev

XSL使用多个条件创建多个表

来自分类Dev

代码以使用多个条件过滤值

来自分类Dev

创建多个按钮而不复制代码?

来自分类Dev

用于创建多个工作簿的 VBA 代码

来自分类Dev

使用条件创建/设置多个关系属性

来自分类Dev

创建具有多个条件的更新查询?

来自分类Dev

云形成资源创建中的多个条件

来自分类Dev

根据条件从单个DataFrame创建多个DataFrame

来自分类Dev

根据多个时间条件创建列

来自分类Dev

创建具有多个条件的更新查询?

Related 相关文章

热门标签

归档