加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

grails – 我可以在Groovy中为另一个附加一个闭包吗?

发布时间:2020-12-14 16:25:27 所属栏目:大数据 来源:网络整理
导读:我在Grails中有两个非常相似的方法,比如“通过os计算统计数据”和“通过浏览器计算统计数据” – 有效地准备一些东西,然后在数据库上运行类似的查询,然后对结果做一些事情.方法不同的唯一部分是它们在我的方法中运行的查询 – def summary = c.list { eq('br
我在Grails中有两个非常相似的方法,比如“通过os计算统计数据”和“通过浏览器计算统计数据” – 有效地准备一些东西,然后在数据库上运行类似的查询,然后对结果做一些事情.方法不同的唯一部分是它们在我的方法中运行的查询 –

def summary = c.list {
    eq('browser',Browser.get(1)) // OR eq('os',OS.get(1))
    between('date',dates.start,dates.end)
}

在我看来,重构它的理想方法是将闭包的第一行作为方法参数传递.喜欢

doStats (Closure query) {
    ...
    def summary = c.list {
        query
        between('date',dates.end)
    }
}

我试过这个,但“查询”被忽略了.我尝试使用query()但是然后在定义的地方执行查询子句,因此这也不起作用.我想我可以将整个闭包作为参数传递,但这似乎是错误的 – 查询可能在将来变得更复杂.

有没有更好的想法?

解决方法

你使用的标准DSL可能与普通的常规封闭不同.

要做你想问的事,你可以使用这里描述的方法 –

http://mrhaki.blogspot.com/2010/06/grails-goodness-refactoring-criteria.html

并将您的查询放入私有方法.

更优雅的解决方案是在grails中使用命名查询 –

http://grails.org/doc/latest/ref/Domain%20Classes/namedQueries.html

看着那(这

recentPublicationsWithBookInTitle {
       // calls to other named queries…
       recentPublications()
       publicationsWithBookInTitle()
  }

示例 –

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读