gpt4 book ai didi

grails - 注释可以用于使Groovy/Grails代码保持DRY吗?

转载 作者:行者123 更新时间:2023-12-02 15:10:48 26 4
gpt4 key购买 nike

我正在使用Grails 2.2.0建立网站,并且正在寻找使我的代码保持干燥的最佳实践/建议。这是我第一次使用Grails,并且我对Groovy和Grails都有一定的了解,但是无论从什么意义上来说都不是专家。我确实来自Java + Spring背景。

我有个性网址。本质上,URI用作查找所需模型的键。如果找不到,请重定向到主页。如果确实存在,它将在 Controller Action 的帮助器中使用(由闭包指示,仅在存在时执行)。这是我当前(有效)来源的经过整理的示例:

UrlMappings.groovy:

"/$groupName/dashboard"(controller: "dashboard", action: "viewAll")
"/$groupName/dashboard/create"(controller: "dashboard", action: "createRecord")
"/$groupName/foo/$action?"(controller: "foo")

BaseController.groovy:
Group requireGroupFromUrl(Closure c) {
if (params.groupName == null) {
redirect(controller: "home", action: "index")
return
}
else {
Group group = Group.findByUrlName(params.groupName)
if (group == null) {
redirect(controller: "home", action: "index")
return
}

c.call(group)
}
}

DashboardController.groovy扩展了BaseController:
def viewAll() {
requireGroupFromUrl({ Group group -> gymHelper(group)})
}

def viewAllHelper(Group group) {

// some logic involving 'group'

def map = [groupInstance: group, /* OTHER CALCULATED/QUERIED PARAMS*/ ]
render(view: "/groupView", model: map)
}

这有效。但是,似乎很需要辅助方法。

乍一看,似乎可以使用过滤器来完成这项工作,但是随后我需要指定要从过滤器中排除的路径(/,/ login,/ register等),这似乎使其与输入中的条目紧密耦合。网址映射。或者我可以将 uri与多种模式一起使用?例如 uri: '*/dashboard/**, */foo/**'?如何继续传递检索到的对象?

可以通过使用仅对适用的 Controller Action 进行注释的“周围”建议进行注释来更好地实现这一点吗?如果是这样,Aspect可以调用 redirect吗?如何将检索到的对象传递给带注释的 Controller 操作?即
@GroupRequired
def viewAll() {
...
}

最佳答案

Controller beforeInterceptor可以很干净地完成此操作:

abstract class BaseController {
def beforeInterceptor = {
if (params.groupName == null) {
redirect(controller: "home", action: "index")
return false
}

Group group = Group.findByUrlName(params.groupName)
if (group == null) {
redirect(controller: "home", action: "index")
return false
}

// put the group into the params object
// for use in the controllers
params.group = group
}
}

class ChildController extends BaseController {
def myAction() {
Group g = params.group

// do things
}
}

关于grails - 注释可以用于使Groovy/Grails代码保持DRY吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15755386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com