gpt4 book ai didi

grails - 命令对象仅在 Controller 中,还是可以传递给服务层?

转载 作者:行者123 更新时间:2023-12-02 15:05:37 25 4
gpt4 key购买 nike

在Grails框架中,我看到了命令对象模式,但是对我来说它的用法不是很清楚。另外,Grails文档给出的大多数示例都是关于域类而不是命令对象的(也许是为了简化代码示例)。

1-命令对象是在 View 和 Controller 层之间使用的东西,必须留在那儿吗?

2-还是将命令对象传递到服务层是一种好习惯?

为了说明第二点:

class MyController {

def updateUserPassword (UserPasswordCommand cmd) {
...
myService.updatePassword(cmd)
...
}
}

如果第2点是不好的做法,那么如何将提交的数据传递到服务层?通过域类?
编辑:似乎还可以

[编辑]

如果我使用命令对象而不是域类,在这种情况下该怎么做:
def signup(UserCreateCommand cmd)
{
if (!cmd.hasErrors()) {
def userInstance = userService.signup(cmd)
}
}
if (cmd.hasErrors()) {
/* Stay on form in order to display errors */
render(view:"/app/authentication/_signupForm", model:[userCreateCommand: cmd])
return
}
...
}

如果用户服务事务结束时,数据库突袭了一个异常(由于刷新数据不遵守架构约束),会发生什么?

我的问题是有两个查询:

首先-例如,当调用cmd.hasErrors()时,会持续调用电子邮件的唯一约束

其次-当服务交易结束时,将刷新到数据库(在我的情况下导致一次SQL插入),并且可能会在列电子邮件中引发一个具有唯一约束的异常

测试cmd.hasErrors()不能防止DB引发违反的约束唯一异常或我错了的情况?

最佳答案

这是将请求参数传递到服务层的最佳方法。我已经看到人们将参数传递给服务,这实际上是最糟糕的做法。我们的 Controller 应该转储, Controller 方法中的最大5-8 LOC是我公司的准则。

命令对象为您提供了如此强大的功能,例如验证,方法等。

关于grails - 命令对象仅在 Controller 中,还是可以传递给服务层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33348254/

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