我有一个现有的应用程序,它是一个前端应用程序,它从外部 Web 服务检索其所有信息。我想使用 Grails 框架重新创建此应用程序,但用例有点奇怪。 Grails 是模型驱动的。在这种情况下,我真的没有数据库表。我的数据是通过网络服务调用实时接收的。我向社区提出的问题是您将如何实现以下用例:
员工搜索:
- 所有员工数据都将来自网络服务调用。我需要允许用户输入例如“EmployeeID”并选择“客户”。
- 然后 Grails 应用程序对适当的网络服务进行网络服务查询并拉回结果。
这是未知的部分:获取这些结果并将它们放入 Grails 模型的最佳方法是什么?换句话说,我需要显示结果(搜索结果)的数据网格。网格应该像 Grails 列表操作一样工作,允许用户对特定列进行排序、分页等。
- 我不得不认为这个用例很常见?放下这样一个项目的最佳方式是什么?我应该使用外部 javaScript 库(如 Dojo 或 JQuery)来提供网格功能吗?
- 性能也是一种方法的关注点
最佳答案
没有一种方法可以创建 Grails 应用程序。应用程序通常会使用域类来轻松访问关系数据库表中的数据,但您可以轻松切换到 NoSQL 数据存储,甚至可以像在应用程序中那样不使用直接持久性。
您的问题的简单答案是,您应该只在 src/groovy
和 src/java
中创建代表您正在处理的数据的非持久数据类来自您的网络服务电话。您仍然可以将 Grails 用于其 Controller 和 GSP、标签库、服务(当然是非事务性的,因为不会有数据库访问),还可以利用许多可用的插件。
使用标准生成的 Controller 和 GSP,您无需执行太多操作即可通过排序和分页显示数据。生成脚本确实需要域类,但你可以稍微作弊来生成那些(当然你总是可以手动编写代码)。例如,如果您在 src/groovy/com/yourcompany 中有一个 Person 类,请将其移动到 grails-app/domain
:
package com.yourcompany
class Person {
String firstName
String lastName
}
然后运行 grails generate-all com.yourcompany.Person
它将创建 Controller 及其单元测试和 GSP。现在将它移回 src/groovy
并根据需要使用它。 GSP 不期望域类,它们只期望单个类实例或实例列表。
您需要将 Controller 调用转换为诸如 person.save()
之类的东西来使用您的网络服务,但大部分代码应该是可重用的。
您可以利用的一件事是验证。您可以使用 @Validateable
注释您的类并定义约束以利用非持久类的 Grails 验证 - 参见 the documentation了解更多详情。
关于Grails Web 服务前端没有真正的域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18110884/