3

我有一个现有的应用程序,它是一个前端应用程序,它从外部 Web 服务中检索其所有信息。我想使用 Grails 框架重新创建这个应用程序,但是用例有点奇怪。Grails 是模型驱动的。在这种情况下,我真的没有数据库表。我的数据是通过网络服务调用实时接收的。我向社区提出的问题是,您将如何实施以下用例:

  1. 员工搜索:

    • 所有员工数据都来自网络服务调用。我需要允许用户输入例如“EmployeeID”并选择“Customer”。
    • 然后,Grails 应用程序对适当的 Web 服务进行 Web 服务查询并拉回结果。
    • 这是未知的部分:获取这些结果并将它们拟合到 Grails 模型中的最佳方法是什么?换句话说,我需要显示结果的数据网格(搜索结果)。网格应该像 Grails 列表操作一样工作,允许用户对特定列、分页等进行排序。

      • 我不得不认为这个用例很常见?放下这样一个项目的最佳方法是什么?我应该使用 Dojo 或 JQuery 等外部 JavaScript 库来提供网格功能吗?
      • 性能也是一种方法的关注点
4

1 回答 1

3

创建 Grails 应用程序的方法不止一种。应用程序通常会使用域类来轻松访问关系数据库表中的数据,但您可以轻松切换到 NoSQL 数据存储,甚至不使用应用程序中的直接持久性。

对您的问题的简单回答是,您应该只在其中创建非持久性数据类,src/groovysrc/java代表您从 Web 服务调用中使用的数据。您仍然可以将 Grails 用于其控制器和 GSP、标记库、服务(当然是非事务性的,因为不会访问数据库),还可以利用许多可用的插件。

您不必做太多事情就可以使用标准生成的控制器和 GSP 来显示具有排序和分页的数据。生成脚本确实需要域类,但你可以作弊来生成那些(当然你总是可以手动编写代码)。例如,如果您在 src/groovy/com/yourcompany 中有一个 Person 类,请将其移动到grails-app/domain

package com.yourcompany

class Person {
   String firstName
   String lastName
}

然后运行grails generate-all com.yourcompany.Person,它将创建控制器及其单元测试和 GSP。现在将其移回src/groovy并根据需要使用它。GSP 不期望域类,它们只期望单个类实例或实例列表。

您需要将控制器调用转换person.save()为使用 Web 服务之类的东西,但大部分代码应该是可重用的。

您可以利用的一件事是验证。您可以使用@ValidateableGrails 验证对非持久类进行注释并定义约束,以获取更多详细信息,请参阅文档

于 2013-08-07T19:48:48.920 回答