gpt4 book ai didi

grails - Grails 中的 Controller 默认是事务性的吗?

转载 作者:行者123 更新时间:2023-12-02 00:57:07 24 4
gpt4 key购买 nike

默认情况下,grails 中的 Controller 操作是事务性的吗?如果不是,那么在 Controller 中执行代码期间的某个点恢复更改的最佳方法是什么。

最佳答案

默认情况下,Grails 中几乎没有任何内容是事务性的,除了较新的 3.1.x 版本中的服务之外。在旧版本中,如果没有为事务行为配置任何内容,则所有公共(public)方法都将是事务性的,因为将应用事务代理。您可以使用static transactional = false禁用它,或者使用@Transactional注释自定义事务行为。您仍然可以(并且应该)在服务中使用 @Transactional 注释 - 您只是不需要禁用自动事务性。

生成的 Controller 和服务确实包含 @Transactional 注释,但这只是一个快捷方式,可以帮助您节省自己添加它们的工作。

尽管 Controller 不是进行事务性工作的好地方,因为 Controller 中最终会出现大量困惑的代码,但分离关注点并将代码放在其所属的位置非常重要(例如,GSP 中的 View 生成、域属性和约束) (在域类中、事务数据库写入和服务中的业务逻辑等),而不是简单地将代码转储到方便的地方。

最好的选择是将请求参数数据绑定(bind)和路由逻辑留在 Controller 中,但将持久性和业务逻辑移动到显式配置为事务性或非事务性的服务,具体取决于每个类和每个方法的需要,以及让 Controller 调用服务和其他助手。

除了使代码更易于维护(由您的同事和 future 的您)之外,这种方法还可以更轻松地正确测试所有内容,因为您的方法和类更简单且更集中。

关于grails - Grails 中的 Controller 默认是事务性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42016513/

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