我有一个比较传统的Grails应用程序。它是单体应用;虽然它在功能线上有一些拆分成插件,但它被构建为单个war文件进行部署。由于公司架构限制,我需要考虑将应用程序的持久性隔离到Web服务(或一系列Web服务)中。如何最好地将Grails应用程序划分为持久性服务和展示应用程序?
我有一个比较传统的Grails应用程序。它是单体应用;虽然它在功能线上有一些拆分成插件,但它被构建为单个war文件进行部署。由于公司架构限制,我需要考虑将应用程序的持久性隔离到Web服务(或一系列Web服务)中。如何最好地将Grails应用程序划分为持久性服务和展示应用程序?
我没有一个现成的解决方案来解决你的问题,而且我也不认为有一个。我只是会解释一下我使用的解决方案以及在你的情况下我会考虑什么。
在我们的组织中,我们的方法是将我们的应用程序分为 Grails 后端和 Flex 前端。原因是我们有许多可用的 Flex 组件,如果使用纯 Web 技术重新实现这些组件将需要太多时间,但这不是我的重点。
在 Grails 中创建 REST 后端很快,因为视图在适当的时候被脚手架生成,控制器很简单,并且通过域约束大大简化了输入验证。
这种分离的缺点是领域对象的定义必须在前端和后端都复制。您可以在前端包含对象验证,也可以不包含,但如果省略它们,它将对 UI 的响应能力产生影响(在 AJAX 调用中向 REST 后端请求实时验证以获取错误)。最终,我们的应用程序相当繁琐,因为在后端修改对象意味着在前端进行修改。此外,我们在前端和后端都进行验证,而且这段代码不共享,因此必须保持同步并在两个地方维护。
我们的应用程序分割方式类似于两个完全不共享代码的Grails应用程序。这种解决方案在您的情况下可行,但肯定不是您要寻找的。
在您的情况下,我看到了两个可行的Web前端解决方案:
使用Groovy REST客户端库直接从控制器中获取和发送回您的域对象。如果需要,将它们打包成反映您的域对象的命令对象,以便您可以与后端共享验证代码。
创建一种REST GORM,用REST Web服务的查询替换Hibernate。您可以查看GORM for Mongo Plugin作为创建此类GORM替代品的示例。
我喜欢最后一个想法,它将是一个有用的公共插件。不幸的是,它还不存在。