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

不应该';Grails GORM调用是否在服务层而不是控制器层?,grails,Grails,根据Grails最佳实践和MVC模式,我试图决定何时是引入服务而不是让控制器发胖的正确时机。我发现这有点矛盾,我所读到的关于最佳实践和常见实践的内容,所以我很想听听其他人对此的看法 考虑到GORM调用,我本以为任何与GORM有关的东西都应该真正进入服务。尽管我自己没有实践过这一点,特别是在编写非常基本的控制器方法时,如show,它只需对域类执行get(),然后呈现视图以显示检索到的对象的详细信息 然而,在阅读了《干净的代码》和类似的书籍之后,维护良好的代码应该是内聚的,方法最好只执行一个任务。因

根据Grails最佳实践和MVC模式,我试图决定何时是引入服务而不是让控制器发胖的正确时机。我发现这有点矛盾,我所读到的关于最佳实践和常见实践的内容,所以我很想听听其他人对此的看法

考虑到GORM调用,我本以为任何与GORM有关的东西都应该真正进入服务。尽管我自己没有实践过这一点,特别是在编写非常基本的控制器方法时,如
show
,它只需对域类执行
get()
,然后呈现视图以显示检索到的对象的详细信息

然而,在阅读了《干净的代码》和类似的书籍之后,维护良好的代码应该是内聚的,方法最好只执行一个任务。因此,在理想情况下,控制器中的show方法是否只负责在渲染视图之前确定要显示的对象?从数据库中检索可以进入数据库中的一个方法,该方法的唯一任务是从数据库中检索,如果没有找到,则抛出异常等

但是,是的,这似乎有点过分了

因此,将这一步骤再进一步,使用
create()
update()
方法。同样,当前Grails生成的代码将所有内容都放在控制器中,根本不使用服务

那么什么时候我们需要使用服务呢?是否只有在必须进行事务处理时,例如,在
create()
调用中,我们可能还希望将记录写入日志文件以保留各种审核日志。这肯定是服务的保证吗


我很想听听其他人认为什么是引入服务的正确时机,我想每个人都会有很大的不同。

我向你推荐这篇文章:

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