首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Grails:服务与Groovy类

Grails:服务与Groovy类
EN

Stack Overflow用户
提问于 2010-04-01 18:06:41
回答 3查看 3.8K关注 0票数 19

文档中写道:

Grails团队不鼓励在控制器中嵌入核心应用程序逻辑,因为它不会促进重用和关注点的干净分离。

我在src/groovy文件夹中有一个API控制器和几个Groovy类。这些类只是实现了我的应用程序逻辑,所以API控制器中的操作是这样工作的:

代码语言:javascript
复制
//index page
def index = {
    render new IndexApi().index(params) as JSON
}

我很好奇--有没有理由把我的应用程序逻辑从普通的groovy类转移到服务中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-01 18:13:27

如果你想要事务性行为,你应该把你的逻辑放在服务中。否则,您将不得不自己处理它,这不符合使用Grails的精神。

我自己并不是grails专家,所以我把我的“非事务性”类放在了服务层之外,比如builder类、helper和其他非事务性的逻辑,但这些逻辑都是在服务层使用的。

票数 9
EN

Stack Overflow用户

发布于 2010-04-01 22:11:05

实际上,服务不仅仅是关于事务的。服务对于零配置可注入的单例组件非常有用,它们可以在不重新启动整个grails环境的情况下重新加载,并且它们可以被发现为工件,因此可以自动使用远程处理插件公开。

票数 20
EN

Stack Overflow用户

发布于 2010-04-01 18:16:31

原因有三:

  1. 它使控制器更小->更易于理解和维护
  2. 它使您的逻辑更易于测试。
  3. 您确实不想手动管理事务。

如果要将所有内容都放在控制器中,则需要创建Web运行时才能运行任何测试。如果您的逻辑在外部,您可以从HTTP请求和所有其他来源复制所需的数据,然后直接调用代码。因此,逻辑并不依赖于HTTP会话、请求或任何其他您不想要的东西。

例如,要测试JSP,您需要一个HTTPRequest。对于请求,您需要一个HTTPSession和一个JSPWriter。它们需要一个会话上下文。因此,为了能够运行一个测试,您需要设置和初始化一大堆类。所有这些都是接口,实现都是私有的。因此,您必须自己实现实际的方法(全部300个)。你最好做对这件事,否则你的测试不会测试你想要的东西。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2559580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档