【问题标题】:Grails Web Service Front End No True DomainsGrails Web 服务前端没有真正的域
【发布时间】:2013-08-07 18:22:47
【问题描述】:

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

  1. 员工搜索:

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

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

【问题讨论】:

    标签: grails grails-orm webservice-client grails-2.0


    【解决方案1】:

    创建 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 服务,但大部分代码应该是可重用的。

    您可以利用的一件事是验证。您可以使用 @Validateable 注释您的类,并定义约束以利用 Grails 对非持久类的验证 - 有关详细信息,请参阅 the documentation

    【讨论】:

    • 就列表功能而言,我认为我需要手动编码排序和分页,对吧?例如,我在非事务域中生成的控制器的列表操作将执行“Person.list (params)”。这将查询数据库,但在我的情况下,如果我已经进行了调用,我将从 Web 服务或缓存中提取数据。排序也是如此,它使用某些参数调用列表操作。顺便谢谢你的回复
    • 对,不会有任何对排序和分页的支持,因为这是在数据库中完成的,但是生成的 list.gsp 将具有正确的标题和分页链接,因此您会收到用于排序/分页的控制器。
    猜你喜欢
    • 2012-08-16
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多