领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多Grails 是一个出色的框架,可以快速轻松地开发 Web 应用程序。您还可以访问大量的插件,这些插件提供功能或使与其他系统的集成变得简单方便。这很好,但在本文中,我想讨论当您的应用程序增长并且您开始淹没在控制器、域类和其他文件的海洋中时会发生什么。
这种模式的真正美妙之处在于,您可以将这些单元聚合到更粗粒度的关注点中,因此最终在多个级别上使用该模式。例如,假设上述 Web 服务提供类似博客的功能。您可以将业务逻辑、SOAP 网关以及可能的 REST 接口打包到一个可以重用的单元中。
Java 世界中这种粗粒度功能的标准打包形式是 Java 归档 (JAR)。如果您已经是 Grails 开发人员,您将知道您的 Grails 应用程序可以使用此类 JAR 文件。但是当涉及到控制器、域类和其他特殊的 Grails “构件”时,它们并没有帮助。幸运的是,我们有一个现成的单元可以提供帮助:Grails 插件。
Ryan Geyer 撰写了 一篇很棒的帖子,演示了如何使用插件来提供可重用的域模型以及为什么要这样做。这是另一个图解形式的例子
我们将博客功能打包到一个插件中,并将支付处理功能打包到另一个插件中。这里的想法是,多个应用程序可能使用相同的支付处理代码,有些应用程序可能还需要博客功能。您还可以打包静态资源以确保所有应用程序都具有一致的外观。这就是品牌插件的用途。这可以包括视图、布局和标签库。
Ryan 的文章展示了如何通过插件安装机制来完成所有这些操作,但让我们面对现实,这不利于快速反馈开发周期。插件中的每次更改都需要您打包插件,然后将其安装到您的应用程序中。幸运的是,还有另一种方法。
假设您有一个简单的应用程序和一个博客插件并排位于同一目录中
my-app +- blog +- app
要将博客插件包含到应用程序中,只需将此条目添加到grails-app/conf/BuildConfig.groovy:
grails.plugin.location.blog = "../blog"
必需的前缀是“grails.plugin.location.” - 后面的内容由您决定,但我建议您使用插件的名称。表达式的右侧是插件开发目录的路径。请注意,这可以是绝对路径或相对路径。
瞧!当您运行应用程序时,您将拥有所有博客的域类、控制器、视图等。更好的是,如果您在应用程序运行时修改了博客的控制器或视图之一,这些更改将自动被拾取。换句话说,您可以获得与应用程序构件一样的就地插件构件的自动重新加载。
因此,使用就地插件,您可以获得关注点分离的好处,但您也可以从正常的 Grails 开发中获得快速反馈的开发周期!
当您处理插件时,此技术效果很好,但它在多个应用程序和开发团队之间不能很好地扩展。幸运的是,您可以轻松删除grails.plugin.location行从BuildConfig.groovy,将插件发布到内部 Maven 存储库 如此处所述,然后通过依赖项 DSL 将插件添加为依赖项。
使用插件将应用程序分解为可重用的部分是一种非常强大且灵活的技术,它将使团队能够轻松管理多个应用程序,甚至复杂的独立应用程序。正如您所看到的,Grails 通过就地插件机制支持这种方法,该机制允许快速开发和插件依赖项。最重要的是,您可以通过快速更改grails-app/conf/BuildConfig.groovy文件在两种机制之间轻松过渡。
我希望本文能激励你们中的一些人尝试这项技术,并从 Grails 对大型和小型应用程序的生产力提升中受益。