Ank*_*wal 6 grails transactions
默认情况下,grails中的控制器操作是事务性的吗?如果不是在控制器中执行代码期间在某个点恢复更改的最佳方法.
Bur*_*ith 12
Grails中几乎没有任何内容是事务性的,除了最近的3.1.x版本以外的所有服务.在旧版本中,如果没有为事务行为配置任何内容,则所有公共方法都将是事务性的,因为将应用事务代理.您可以static transactional = false使用@Transactional注释禁用或使用注释自定义事务行为.您可以(并且应该)仍然@Transactional在服务中使用注释 - 您只需要禁用自动事务性.
生成的控制器和服务确实包含@Transactional注释,但这只是一个快捷方式,可以节省您自己添加它们的工作.
然而,控制器是进行事务性工作的不好的地方,因为你最终会在控制器中出现大量混乱的代码,但重要的是分离关注点并将代码放在它所属的位置(例如,GSP中的视图生成,域属性和域类中的约束) ,事务性数据库写入和服务中的业务逻辑等)而不是简单地将代码转储到方便的地方.
您最好的办法是将请求参数数据绑定和路由逻辑保留在控制器中,但将持久性和业务逻辑移动到明确配置为事务性或非事务性的服务,具体取决于每个类和每个方法所需的内容,并具有控制器呼叫服务和其他帮助者.
除了使代码更易于维护(由您的同事和未来的您)之外,这种方法还可以更容易地正确测试所有内容,因为您的方法和类更简单,更集中.
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |