Grails:服务 VS Groovy 类
Posted
技术标签:
【中文标题】Grails:服务 VS Groovy 类【英文标题】:Grails: Services VS Groovy classes 【发布时间】:2011-02-03 07:31:06 【问题描述】:文档说:
Grails 团队不鼓励 嵌入核心应用逻辑 在控制器内部,因为它没有 促进重复使用和清洁分离 的担忧。
我在 src/groovy 文件夹中有一个 API 控制器和几个 Groovy 类。这些类只是实现了我的应用程序逻辑,因此 API 控制器中的操作以这种方式工作:
//index page
def index =
render new IndexApi().index(params) as JSON
我很好奇 - 有什么理由将我的应用程序逻辑从普通的 groovy 类转移到服务中?
【问题讨论】:
【参考方案1】:实际上,服务不仅仅是交易。服务非常适合零配置可注入单例组件,它们可以在不重新启动整个 grails 环境的情况下重新加载,并且可以作为人工制品被发现,因此可以通过远程插件自动公开。
【讨论】:
【参考方案2】:如果您想要交易行为,您应该将您的逻辑放在服务中。否则你将不得不自己处理它,这不符合使用 Grails 的精神。
我本人不是 Grails 专家,因此我将“非事务性”类放在服务层之外,例如构建器类、帮助程序和其他非事务性但从服务层使用的逻辑。
【讨论】:
【参考方案3】:有三个原因:
它使控制器更小 -> 更易于理解和维护
它让你的逻辑更容易测试。
您真的不想手动管理交易。
如果您将所有内容都放在控制器中,则需要创建 Web 运行时才能运行任何测试。如果您的逻辑在外部,您可以从 HTTP 请求和所有其他来源复制您需要的数据,然后调用代码。所以逻辑不依赖于 HTTP 会话、请求或任何你不想做的事情。
例如,要测试 JSP,您需要一个 HTTPRequest。对于请求,您需要一个 HTTPSession 和一个 JSPWriter。那些需要会话上下文。因此,为了能够运行单个测试,您需要设置和初始化一大堆类。所有这些都是接口,实现是私有的。所以你必须自己实现实际的方法(全部 300 个)。你最好把这件事做好,否则你的测试不会测试你想要的。
【讨论】:
以上是关于Grails:服务 VS Groovy 类的主要内容,如果未能解决你的问题,请参考以下文章
Grails 没有从 BuildConfig.groovy 将 jars 添加到类路径