我有一个Grails Application AppA。我计划创建一个新的Grails应用程序AppB,其中AppB实际上使用相同的AppA服务和模型。
我应该如何处理?
请注意,AppA有一些延迟加载的关系调用(即entity1.entity2.entity3.propName
)&来自表示层(控制器和视图)的GORM调用(即Entity1.get(1L)
)也是如此。虽然我可以将其中的一部分推回到服务中,但我担心重构努力让视图中的关系调用保持不变(即我需要急于加载一些关联,或者创建数据传输对象)
答案 0 :(得分:5)
Grails分享常见功能,实用程序和其他方法的方法是制作一个封装它们的插件并将其安装到两个项目中。
插件可以包含任何可以放在常规Grails应用程序中的内容 - 例如模型,服务,视图,控制器,配置文件,web-app下的资源等。
然后,您可以将其发布到内部svn存储库,或者只使用package-plugin
修改强>
在不断更新代码时执行此操作的一种方法是将其作为内联插件。因此,从application.properties中删除插件并添加:
grails.plugin.location."name-of-plugin" = "/path/to/plugin/dir" // or "../plugin/"
这消除了重新安装插件的必要性。但这仅适用于开发时间。
答案 1 :(得分:1)
您是否考虑过将模型和服务(两个应用程序使用的模型和服务)分离为插件的选项。我认为这至少是我在社区内所遵循的首选方式。
您可以查看this link。它并不完全等同于您的情况,但应该为您提供插件方法的好主意。
答案 2 :(得分:1)
我在之前的项目中遇到过这种情况,我们使用了一个插件项目来保存我们的常用功能,并且它运行得非常好。我不认为jar文件会运行良好,因为据我所知,你无法利用服务的自动连接依赖注入,域对象上的域/ GORM /动态查找器等等。
答案 3 :(得分:0)
我想我会把功能放到一个单独的jar中并在两个应用程序中使用它(所以你的建议没有2)。我不会提出新的申请(建议1),因为你只需要一些服务而不是整个网络应用程序,我不会做建议3,因为服务不像建议2那样可重复使用。