这个 精通 Grails 系列文章主要关注智能代码重用。如果您需要在多个地方复制和粘贴相同的 GroovyServer Pages (GSP) 代码段,您就可以创建一个部分模板或一个自定义 TagLib。如果您发现有一 两个方法在多个控制器或域类中很普遍,您就可以使用 ExpandoMetaClass 创建一个抽象父类来直接扩展 或嫁接这些方法。如果您有某个共享应用程序功能,那么可以将它重构为一个服务或一个自定义编解码器 。
关于本系列
Grails 是一个现代的 Web 开发框架,它将熟悉的 Java 技术(比 如 Spring 和 Hibernate)和最新的实践(比如约定优于配置)结合起来。用 Groovy 编写的 Grails 使 您可以与遗留的 Java 代码无缝集成,同时又添加了脚本语言的灵活性和动态性。学习了 Grails 之后, 您将对 Web 开发有新的看法。
但这些都是微观层面上的东西。如果在宏观层面有某个共享功能, 需要控制器和域类、服务和编解码器,以及一个典型的 Grails 的其他组件的联合和协调,那又该怎么办 呢?如前所述,答案就是插件。
在 “精通 Grails:了解插件” 中,我们学习了一个 现有插件:Searchable。Grails Plugins 门户网站有 250 多个插件可用(参见 参考资料)。这个数字 还在不断增加,原因是通过插件扩展现有的 Grails 应用程序是 Grails 的核心理念。在本文中,您将学 习如何构建自己的自定义插件。示例插件的源代码可以从 下载 获取。
ShortenUrl 插件简介
测试至上
测试您的 Grails 应用程序总是很重要,在创建插件时,测试尤其重要。插件中 的缺陷的负面影响可能会成倍放大,损害安装该插件的应用程序。您将看到,本文将重点关注测试。
在这个 Twitter.com 和手机消息通讯时代,许多长 URL 不能满足消息上设置的 140 个字符的限 制,这是一件麻烦事!幸运的是,有几个 URL 缩短服务强烈要求作为自定义插件集成到 Grails 中。
要创建一个自定义插件,必须略微更改 Grails 例程。您必须输入 grails create-plugin(见清单 1 ),而不是像往常一样输入 grails create-app。(一定要在一个新的空目录中输入这个命令,而不是 在一个现有 Grails 目录中输入。本文末尾将介绍如何集成这个新插件和一个现有 Grail 应用程序)。
清单 1. 创建一个自定义插件
$ grails create-plugin shortenurl
生成的目录结构与一个典型的 Grails 应用程序一致。但是,根目录中有一个文件将这个项目识别为 一个插件:ShortenurlGrailsPlugin.groovy。清单 2 显示了一段代码:
清单 2. 插件配置文件
class ShortenurlGrailsPlugin {
// the plugin version
def version = "0.1"
// the version or versions of Grails the plugin is designed for
def grailsVersion = "1.1.1 > *"
// the other plugins this plugin depends on
def dependsOn = [:]
// resources that are excluded from plugin packaging
def pluginExcludes = [
"grails-app/views/error.gsp"
]
// TODO Fill in these fields
def author = "Your name"
def authorEmail = ""
def title = "Plugin summary/headline"
def description = '''\\
Brief description of the plugin.
'''
//snip
}