【问题标题】:How to implement a "remote" Domain?如何实现“远程”域?
【发布时间】:2012-05-23 18:01:44
【问题描述】:

想象一下两个共享一个域类的 Grails 应用程序。也许是 Book 域类。

一个应用程序被标识为数据的所有者,一个应用程序必须访问域数据。亚马逊和亚马逊网络服务之类的东西。

我想拥有的应用程序将使用普通的域类并通过 Web 服务公开数据是微不足道的 - 在 grails 中没有问题。

但是在其他应用程序中实现域的最佳实践是什么?

  • 使用服务访问远程域,根本不实现本地域类?
  • 实现一个本地域类,覆盖 get() 方法以获取远程数据并将本地数据库用作缓存?
  • 您想到了什么其他解决方案?

【问题讨论】:

    标签: grails groovy grails-domain-class


    【解决方案1】:

    Ryan Geyer 有一篇非常有趣的文章Modularizing your Grails application domain classes 列出了这个问题的 3 个解决方案:

    1. 作为 RESTful JSON 服务 - 在 Grails 中很容易获得此设置,但您会失去自动 GORM 功能。

    2. 将域类分离到库 JAR 文件中,并在我的其他两个应用程序中引用该库。这并不像最初听起来那么容易

    3. 创建一个 Grails 插件。 将域对象放入插件中。然后,您的每个应用程序都可以导入此插件。然后,您可以根据需要创建具有不同功能的不同控制器。示例代码位于:

      git clone git://ec2.nslms.com/grails/blog_example_modular

    Ted Naleid 稍后在 post 中给出了一个很好的提示并建议...

    “创建一个 grails-app/conf/BuildConfig.groovy 文件并将插件名称和源路径放入其中。...如果您这样做,您的应用程序将看到您的域的实时更改/controller/service/etc 类就像它们实际上在当前应用程序中一样,并且在您进行更改时无需重新打包和重新安装插件。”

    Using memcache 应该使两个应用程序能够拥有一致的数据视图,并避免每个单独的应用程序拥有自己的不一致缓存。

    【讨论】:

    • 很好的答案,但是解决方案 2 和 3 仍然需要将两个应用程序都连接到数据库:-( 我需要一个更像您的解决方案 1 的解决方案。我知道我会失去一些功能,但我猜我可以通过缓存来解决这个问题(使用 locak 域作为缓存域,并且只对 .get(id) 进行远程请求)
    • 如果您使用选项 1,json-rest-api 是一个很棒的设置插件!
    • json-rest-api 看起来很棒!至少,这是我问题的一方面的解决方案:-)
    • 链接已失效。 Ryan 的博文可用on new site
    • 我很好奇,您能否详细说明使选项 (2) 比选项 (3) 更难的一些注意事项?谢谢。
    【解决方案2】:

    我认为您可以制作域类的 JAR 文件并添加对其他 grails 应用程序的引用。

    【讨论】:

    • 你在你的应用程序中尝试过这些东西吗?
    【解决方案3】:

    找到另一个有趣的解决方案:

    Riak 是具有一流 REST API 的键/值数据库。 riak 有一个 grails 插件,它将大部分 GORM 功能(关系、动态查找器等)映射到 riak 的 REST API:http://grails.org/plugin/riak

    现在是我尚未测试的部分:如果您使用 grails 2.0 的 DataSources 功能,应该可以只将那些“远程”域连接到 riak 数据库。

    因此,将有一个域存储在 riak 数据库中,并且多个应用程序将能够通过干净的 REST API 轻松访问它。

    好的。这也表明我的问题是多么愚蠢 - 如果您通过同一个 SQL 数据库连接多个应用程序,那将是相同的。但有时人们想要一些更时髦的东西,比如 web 服务。

    【讨论】:

    • 顺便说一句:也许还有其他数据库有一个 GORM 插件,它使用 web 服务 API 来连接。
    猜你喜欢
    • 1970-01-01
    • 2020-04-04
    • 2023-03-28
    • 2011-04-07
    • 2011-06-10
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2012-11-12
    相关资源
    最近更新 更多