2011-12-15 65 views
2

我是Grails和Web开发新手。我开始在Schedule管理网站上做一个项目。我遇到了由Grails提供的Service概念。我理解了这个概念,但我仍然对使用服务的时机感到困惑。我应该何时考虑在Grails中实施服务?

例如,我需要实现一个search模块,其中manager可以搜索user以查找他的schedules。在这种情况下,将它作为控制器还是服务来实现会很好?

所以,

  • 当我应该在哪里使用Service

回答

2

什么和在哪里我应该使用Service

当你希望你的控制器做一些可能被其他控制器重用的东西时 在我们的应用程序中,我们正在做一个服务的功能分离。我们有一个CorePersistanceService,它提供了创建,删除,更新和操作核心域类(我们的核心)的方法。

我认为持久性服务是在整个Grails代码中重用GORM代码的好方法。您可以在域类中创建方法,但我不喜欢这种方式,但我不这么认为

我们有一个用于创建PDF的PDFService类,一个连接到Solr的SolrService,一个收集我们所有方法的统计服务它收集我们的数据上的statictics

Grails中的服务是一种收集某个特定功能主题的方法,以便在控制器中重用它们的可能性(我忘了提及我们的SecurityService,这是一个相当不错的Cross-应用示例)

+6

这也是一种不需要任何配置即可获得交易的便捷方式,但可以通过@Transactional注释轻松覆盖默认行为 – 2011-12-15 08:15:12

+1

@BurtBeckwith Right!当你使用Quartz Plugin时,这是一种简单的方式在控制器和作业之间共享代码(BTW,Burt,感谢SpringSecurity插件:-)) – Grooveek 2011-12-15 08:39:28

+0

@Grooveek:感谢你分享你的经验;) – 2011-12-15 09:16:28

6

要添加到Grooveek的答案;

使用服务让您的控制器保持清洁干净也很好。

因此,视图只是呈现数据到屏幕,域对象存储状态,控制器围绕应用程序路由用户,服务执行工作。

3

我没有足够的声望评论答案或投票,所以我必须提供一个真正应该是评论的答案。反正...

@tim_yates回答+1。得爱薄控制器。 2件事情,我想补充到控制器的描述:

  1. 将打服务(例如日期,数量等)之前,翻译从浏览器参数
  2. 将转换数据从返回服务变为可供观点消费的东西。

对我来说,理想情况下,服务永远不会处理将String参数转换为固有类型。或者处理建立要在视图上显示的模型。

相关问题