想象一下两个共享一个域类的 Grails 应用程序。也许是 Book 域类。
一个应用程序被标识为数据的所有者,一个应用程序必须访问域数据。亚马逊和亚马逊网络服务之类的东西。
我想拥有的应用程序将使用普通的域类并通过 Web 服务公开数据是微不足道的——在 grails 中没有问题。
但是在其他应用程序中实现域的最佳实践是什么?
- 使用服务访问远程域而不实现本地域类?
- 实现一个本地域类,覆盖 get() 方法以获取远程数据并将本地数据库用作缓存?
- 你想到了什么其他的解决方案?
想象一下两个共享一个域类的 Grails 应用程序。也许是 Book 域类。
一个应用程序被标识为数据的所有者,一个应用程序必须访问域数据。亚马逊和亚马逊网络服务之类的东西。
我想拥有的应用程序将使用普通的域类并通过 Web 服务公开数据是微不足道的——在 grails 中没有问题。
但是在其他应用程序中实现域的最佳实践是什么?
Ryan Geyer有一篇非常有趣的文章Modularizing your Grails application domain classes,其中列出了这个问题的 3 个解决方案:
作为RESTful JSON 服务- 在 Grails 中很容易获得此设置,但随后您将失去自动 GORM 功能。
将域类分离到一个库 JAR 文件中,并在我的其他两个应用程序中引用该库。这并不像最初听起来那么容易
创建一个 Grails 插件。将域对象放入插件中。然后,您的每个应用程序都可以导入此插件。然后,您可以根据需要创建具有不同功能的不同控制器。示例代码可在以下位置获得:
git clone git://ec2.nslms.com/grails/blog_example_modular
Ted Naleid 稍后在帖子中给出了一个很好的提示并建议......
“创建一个 grails-app/conf/BuildConfig.groovy 文件并将插件名称和源路径放入其中。...如果您这样做,您的应用程序将看到您的域/控制器/服务/等的实时更改类,就好像它们实际上在当前应用程序中一样,并且在您进行更改时无需重新打包和重新安装插件。”
使用 memcache应该使两个应用程序能够拥有一致的数据视图,并避免每个单独的应用程序拥有自己的不一致缓存。
我认为您可以制作域类的 JAR 文件并添加对其他 grails 应用程序的引用。
找到另一个有趣的解决方案:
Riak 是具有一流 REST API 的键/值数据库。riak 有一个 grails 插件,它将大部分 GORM 功能(关系、动态查找器等)映射到 riak 的 REST API:http: //grails.org/plugin/riak
现在是我尚未测试的部分:如果您使用 grails 2.0 的 DataSources 功能,应该可以只将那些“远程”域连接到 riak 数据库。
结果,将有一个域存储在 riak 数据库中,并且多个应用程序将能够通过干净的 REST API 轻松访问它。
好的。这也表明我的问题是多么愚蠢 - 如果您通过同一个 SQL 数据库连接多个应用程序,它会是一样的。但有时人们想要一些更时髦的东西,比如 web 服务。