Ole*_*ndr 19 service grails groovy grails-controller
文件说:
Grails团队不鼓励将核心应用程序逻辑嵌入到控制器中,因为它不会促进重用和关注的清晰分离.
我在src/groovy文件夹中有一个API控制器和一些Groovy类.这些类只实现了我的应用程序逻辑,因此API控制器中的操作以这种方式工作:
//index page
def index = {
render new IndexApi().index(params) as JSON
}
Run Code Online (Sandbox Code Playgroud)
我很好奇 - 有没有理由将我的应用程序逻辑从简单的groovy类转移到服务中?
Mar*_*mer 20
实际上,服务不仅仅与交易有关.服务非常适合零配置可注射单件组件,并且可以在不重新启动整个grails环境的情况下重新加载它们,并且它们可以被发现为人工制品,因此可以通过远程插件自动暴露.
如果您想要事务性行为,您应该将您的逻辑放在服务中.否则你必须自己照顾它,这不是使用Grails的精神.
我自己不是grails专家,我将我的"非事务性"类放在服务层之外,比如构建器类,帮助程序和其他非事务性但从服务层使用的逻辑.
原因有三:
它使控制器更小 - >更容易理解和维护
它使您更容易测试逻辑.
您真的不想手动管理您的交易.
如果要将所有内容都放在控制器中,则需要创建Web运行时才能运行任何测试.如果您的逻辑在外面,您可以从HTTP请求和所有其他来源复制所需的数据,只需调用代码即可.因此,逻辑不依赖于HTTP会话,请求或您不想要的任何其他内容.
例如,要测试JSP,您需要HTTPRequest.对于请求,您需要HTTPSession和JSPWriter.那些需要会话上下文.因此,为了能够运行单个测试,您需要设置并初始化一大堆类.所有这些都是接口,实现是私有的.所以你必须自己实现实际的方法(所有300个).你最好把这个做对,否则你的测试不会测试你想要的.