用Groovy创建领域特定语言

今天(2月21日)是Groovy/Grails Experience大会(也就是大家所熟知的2GX)的第一天,会议在Virginia的Reston举行。该会议会持续3天,包括了四十个90分钟的专题、小组讨论以及代码研习会。今天的首个专题之一是Venkat Subramaniam的“DSL In Groovy”。领域特定语言的话题过去曾经出现在InfoQ上,包括Martin Fowler的领域特定语言介绍和Ian Roughley的关于用JRuby构建领域特定语言的文章。

Venkat的专题提供了关于什么是DSL、它们的特征、DSL类型(内部/外部)以及Groovy用来创建和使用它们的特性等相关信息。Venkat首先集中于使用一些Groovy的一些内置特性创建内部DSL(internal DSL):

  • 方法缺失(Method Missing) —— 当一个方法无法找到时被调用的一种特定方法,该调用允许被开发者截获
  • Categories —— 允许在运行时将新方法增加进任何类中
  • ExpandoMetaClass —— 一种动态可扩展的Bean

除了这三个特性外,Venkat论述了Groovy对开发者没有约束以及其促进DSL的附加特性,包括:

  • 闭包(Closures)
  • 在使用圆括号上的不严格的规则
  • 内置的list和map语法
  • 属性缺失(Property Missing)
  • 动态给接口增加方法以及让具体类也获得那些方法的能力
在决定当创建DSL时使用哪种方法时,Venkat解释了使用Categories或ExpandoMetaClass的主要区别,
  • Categories允许你在战术上增强一个类
  • ExpandMetaClass在本质上更深远、全面
  • 你可能不想从全局影响一个类
  • Categories提供了受控的灵活性

领域特定语言正持续受到关注,而且可以用Groovy内置特性创建和使用。

查看英文原文:Creating Domain Specific Languages with Groovy

你可能感兴趣的:(用Groovy创建领域特定语言)