【问题标题】:Shouldn't Grails GORM calls be in the service and not controller layer?Grails GORM 调用不应该在服务而不是控制器层中吗?
【发布时间】:2012-08-24 13:35:22
【问题描述】:

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

考虑到 GORM 调用,我原以为任何与 GORM 相关的东西都应该真正进入服务。虽然我自己没有练习过,尤其是在编写非常基本的控制器方法时,例如 show,它只是在域类上执行 get(),然后渲染视图以显示检索到的对象的详细信息。

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

但是,是的,这似乎有点矫枉过正。

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

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

我很想听听其他人认为引入服务的正确时间,我想这因人而异。

【问题讨论】:

    标签: grails


    【解决方案1】:

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 2010-10-22
        • 2011-02-11
        • 1970-01-01
        • 2015-01-23
        • 2015-10-31
        相关资源
        最近更新 更多