【发布时间】:2011-02-22 22:14:39
【问题描述】:
我正在开发的 Grails 应用程序变得非常大,最好将其重构为 几个模块,这样我们就不必每次都重新部署整个应用程序。
将 Grails 应用程序拆分为多个模块的最佳做法是什么? 特别是我想创建一个域类+相关服务的包,并将它作为一个模块在应用程序中使用。这可能吗? 插件可以做到吗?
【问题讨论】:
标签: design-patterns grails plugins module
我正在开发的 Grails 应用程序变得非常大,最好将其重构为 几个模块,这样我们就不必每次都重新部署整个应用程序。
将 Grails 应用程序拆分为多个模块的最佳做法是什么? 特别是我想创建一个域类+相关服务的包,并将它作为一个模块在应用程序中使用。这可能吗? 插件可以做到吗?
【问题讨论】:
标签: design-patterns grails plugins module
这就是插件的用途。在将大型应用程序拆分为多个模块的情况下,使用“内联插件”功能非常有用。只需添加
grails.plugin.location."<plugin-name>" = "<path to plugin dir>"
发送至您应用的grails-app/conf/BuildConfig.groovy。通过这样做,您不再需要在插件内的每次修改后运行 package-plugin 和 install-plugin。
有关使用插件的详细信息,请参阅 Grails 参考文档或其中一本可用书籍:“Grails 权威指南”或“Grails in Action”。两者都绝对物有所值。
【讨论】:
Grails 的插件是一种很好的打包机制,可用于跨应用程序的代码/设计/架构可重用性,或用于澄清多个作者之间的代码所有权(这对于大型应用程序而言似乎很可能),但我认为它们不会为您节省很多部署的痛苦 - 毕竟,代码仍然存在于应用程序中,应用程序仍然需要配置插件等。
是的,由于在部署目标上缓存了插件,您将节省一点时间,但您会在代码、测试和管理插件本身的版本控制方面带来额外的复杂性。
也就是说,我确实认为放置一个域+服务插件是一个很好的重用模块 - 我们刚刚这样做了 - 但它比帮助部署更有害> 问题。
IMO,大型 Grails 应用程序的“最佳实践”是考虑将应用程序拆分为较小的应用程序,并通过数据库或内存缓存或某种形式的消息传递进行通信——“没有重新部署整个事物”并趋向于更好的可扩展性。在您希望代码/设计重用或模式隔离的每个应用程序中使用插件,并且将获得足够的重用以证明各种开销是合理的。
【讨论】:
同意,插件是执行此操作的公认方式。这将有助于管理您的代码依赖关系图并将您的应用程序拆分为更易于独立测试和理解的部分。然而,插件在部署时仍然意味着作为一个应用程序结合在一起。我不确定您正在寻找哪种部署模式。
【讨论】: