Grails GORM调用不应该在服务而不是控制器层吗?

时间:2012-08-24 13:35:22

标签: grails

根据Grails的最佳实践和MVC模式,我正在尝试确定何时是引入服务的正确时间而不是保持控制器的增长。我发现它有点矛盾,我读到的最佳实践和看似普遍的做法,所以很想听听其他人对此的看法。

考虑到GORM调用,我原本预计与GORM有关的事情应该真正进入服务。虽然我自己也没有这样做,特别是在编写非常基本的控制器方法时,例如show只在域类上执行get(),然后渲染视图以显示检索到的对象的细节。 / p>

然而,在遵循“清洁代码”和类似书籍等书籍后,维护良好的代码应该具有凝聚力,理想情况下,方法应该只执行一项任务。那么在完美的世界中,控制器中的show方法是否只负责在渲染视图之前确定要显示的对象?从数据库中检索可以进入数据库中的一个方法,该方法的唯一任务是从数据库中检索并在未找到时抛出异常等。

但是,这看起来有点像矫枉过正。

更进一步,create()update()方法。目前,Grails生成的代码再次将所有内容都放入控制器中,根本不使用任何服务。

那么建议的时间点是否需要使用服务?只有当事务必须发生时,例如,在create()调用时,我们可能还想将记录写入日志文件以保持审计日志的排序。当然这需要服务吗?

我很想听到其他人认为是介绍服务的正确时间,我想这个人与人之间差别很大。

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

我们在Domain类中创建静态方法来封装查询。服务仅用于事务操作或具有多个域交互的非常复杂的查询。控制器只需调用域或服务方法。