文档中写道:
Grails团队不鼓励在控制器中嵌入核心应用程序逻辑,因为它不会促进重用和关注点的干净分离。
我在src/groovy文件夹中有一个API控制器和几个Groovy类。这些类只是实现了我的应用程序逻辑,所以API控制器中的操作是这样工作的:
//index page
def index = {
render new IndexApi().index(params) as JSON
}
我很好奇--有没有理由把我的应用程序逻辑从普通的groovy类转移到服务中?
发布于 2010-04-01 18:13:27
如果你想要事务性行为,你应该把你的逻辑放在服务中。否则,您将不得不自己处理它,这不符合使用Grails的精神。
我自己并不是grails专家,所以我把我的“非事务性”类放在了服务层之外,比如builder类、helper和其他非事务性的逻辑,但这些逻辑都是在服务层使用的。
发布于 2010-04-01 22:11:05
实际上,服务不仅仅是关于事务的。服务对于零配置可注入的单例组件非常有用,它们可以在不重新启动整个grails环境的情况下重新加载,并且它们可以被发现为工件,因此可以自动使用远程处理插件公开。
发布于 2010-04-01 18:16:31
原因有三:
如果要将所有内容都放在控制器中,则需要创建Web运行时才能运行任何测试。如果您的逻辑在外部,您可以从HTTP请求和所有其他来源复制所需的数据,然后直接调用代码。因此,逻辑并不依赖于HTTP会话、请求或任何其他您不想要的东西。
例如,要测试JSP,您需要一个HTTPRequest。对于请求,您需要一个HTTPSession和一个JSPWriter。它们需要一个会话上下文。因此,为了能够运行一个测试,您需要设置和初始化一大堆类。所有这些都是接口,实现都是私有的。因此,您必须自己实现实际的方法(全部300个)。你最好做对这件事,否则你的测试不会测试你想要的东西。
https://stackoverflow.com/questions/2559580
复制相似问题