【发布时间】:2015-06-23 07:54:00
【问题描述】:
我知道早期版本的 Grails 使用原型作用域作为控制器,因为当时动作都是闭包。
我知道当前版本的文档建议将单例范围的控制器用于将方法用作操作的控制器。
从下面的帖子看来,方法和单例范围似乎更可取或推荐,但不清楚原因。
ttp://grails.1312388.n4.nabble.com/Default-scope-for-controllers-doc-td4657986.html
我们有一个大型项目,它使用原型作用域控制器和操作作为方法。更改为推荐的控制器范围涉及风险和重新测试,以及从现有控制器中删除任何非单例友好状态。
我想知道为什么 Grails 推荐单例范围将方法作为动作控制器?是因为它更常见,更类似于 Spring MVC,并且避免了混淆,还是有提高性能的机会,还是什么? 如果我切换到单例控制器,我会得到什么?如果我不进行切换,成本是多少?
【问题讨论】:
-
这是一个更适合groups.google.com/forum/#!forum/grails-dev-discuss 的讨论。简短的回答是,除非您正在做其他次优的事情,否则您不需要为每个请求创建一个新的控制器实例。单例控制器几乎总是正确的。如需讨论,请发布到邮件列表。我将此作为评论而不是答案,因为这对于 StackOverflow 来说并不是一个好问题。
-
杰夫,感谢您的评论和简短的回答。我按照你的建议发表了讨论。惊讶于您觉得 StackOverflow 问题不好,这似乎很适合我,因为文档建议进行更改但没有说明更改的理由,并且在 Internet 上的其他地方没有对该问题的可靠答案,我能够去寻找。
-
“很惊讶你觉得 StackOverflow 问题不好” - 它不是一个好的 SO 问题的部分原因是它提出了 4 个单独的问题。它们是相关但独立的问题。围绕这一点的影响并非微不足道,对于大多数人来说,需要进行讨论才能真正解决所有问题。我看到你已经接受了伯特给出的答案,所以我很高兴你得到了你需要的东西。
-
杰夫,好的,关于 4 个问题的要点。我想我想留下这个问题,因为 Burt 的信息非常详尽,而且我认为,对于从早期 Grails 版本开始的任何其他大型项目,现在必须对重构为单例控制器进行成本效益分析。再次感谢你们两位的帮助。非常感谢。
-
“对于任何其他从早期 Grails 版本开始的大型项目来说都很重要,现在必须对重构为单例控制器进行成本效益分析”——重构并没有真正的新好处。现在的好处/缺点和以前一样(大部分情况下)。任何可以证明在以前版本的 Grails 中利用有状态控制器的人都可能会使用相同的论据来证明在最近版本的 Grails 中这样做是合理的。我认为这些理由在很大程度上是虚假的,但它们不会改变。
标签: performance grails memory scope grails-controller