将Grails应用程序拆分为Web服务和演示文稿的最佳方法是什么?

时间:2011-11-02 20:12:29

标签: web-services grails

我有一个相当传统的Grails应用程序。它是单片的;虽然它在功能线上有点分裂成插件,但它构建在一个单一的战争部署中。由于公司架构限制,我需要考虑将应用程序的持久性隔离到Web服务(或一系列Web服务)中。将Grails应用程序划分为持久性服务和表示应用程序的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

将您的域类放在Grails插件中,并拥有两个不同的Grails应用程序,一个用于Web前端,另一个用于Web服务。两者都直接访问数据库,但持久性代码不重复。

这是一个blog post,其中包含有关如何实现这一目标的更多详细信息。

答案 1 :(得分:0)

我没有针对您的问题的开箱即用的解决方案,我不相信有一个。我将解释我使用的解决方案以及我在您的情况下会考虑的内容。

在我的组织中,我们的方法是将我们的应用程序分离为Grails后端和Flex中的前端。原因是我们有许多即用型Flex组件,这些组件需要花费太多时间才能使用纯Web技术重新实现,但这不是我的观点。

在Grails中创建REST后端很快,因为视图在适当的时候是脚手架,控制器很简单,并且域约束大大简化了输入验证。

这种分裂的缺点是域对象的定义必须在前端重复。您可能在前端包含对象验证,但如果省略它们,则会对UI响应性产生影响(在AJAX调用中对REST后端的请求进行实时验证得到错误)。最后,我们的应用程序非常麻烦,因为在后端修改对象意味着在前端进行修改。此外,我们在前端和后端都进行了验证,并且此代码不是共享的,因此它必须保持同步并保持在两个位置。

我们的应用程序的拆分方式类似于两个完全不同的Grails应用程序,它们不共享代码。一个可以在你的情况下工作的解决方案,但肯定不是你想要的。

在您的情况下,我看到两个可行的Web前端解决方案:

  • 使用Groovy REST client library直接从您的控制器获取并发回您的域对象。如果需要,将它们打包在反映域对象的命令对象中,以便您可以与后端共享验证代码。

  • 创建某种 REST GORM ,将Hibernate替换为对REST Web服务的查询。您可以查看GORM for Mongo Plugin作为如何创建此类GORM替换的示例。

我喜欢上一个想法,它将是一个有用的公共插件。它还不存在,不幸的是。

相关问题