WEB开发网
开发学院软件开发Java 演化架构和紧急设计: 使用 Groovy 构建 DSL 阅读

演化架构和紧急设计: 使用 Groovy 构建 DSL

 2010-10-09 08:12:32 来源:WEB开发网   
核心提示: 当您使用 StringCategory 时,您必须在 use 块中访问它,演化架构和紧急设计: 使用 Groovy 构建 DSL(3),在 use 块的圆括号中有多个 categories 类,之间用逗号隔开,我也可以调用像 5.pm 这样对开发人员来说稀奇古怪的命令,这是一个打开 Intege

当您使用 StringCategory 时,您必须在 use 块中访问它。在 use 块的圆括号中有多个 categories 类,之间用逗号隔开,这是合法的。

这是在 DSL 中使用开放类表示数量的另一个实例,考虑清单 3 中的代码,实现了一个预约日历:

清单 3. 一个简单的日历 DSL

def calendar = new AppointmentCalendar() 
 
use (IntegerWithTimeSupport) { 
  calendar.add new Appointment("Dentist").from(4.pm) 
  calendar.add new Appointment("Conference call") 
         .from(5.pm) 
         .to(6.pm) 
         .at("555-123-4321") 
} 
calendar.print() 

清单 3 实现了和 “连贯接口” 中 Java 实例一样的功能,但是增强了语法,其中包括了在 Java 代码中所不能实现的。例如,请注意 Groovy 允许在有些地方删除括号(像围绕 add() 方法的参数这种情况)。我也可以调用像 5.pm 这样对开发人员来说稀奇古怪的命令。这是一个打开 Integer 类(在 Groovy 中所有的数字可以自动使用 type-wrapper 类,即使 5 是一个真正的 Integer )和添加一个 pm 属性的实例。实现该开放类的类在清单 4 中显示:

清单 4. IntegerWithTimeSupport 类定义

class IntegerWithTimeSupport { 
  static Calendar getFromToday(Integer self) { 
    def target = Calendar.instance 
    target.roll(Calendar.DAY_OF_MONTH, self) 
    return target 
  } 
 
  static Integer getAm(Integer self) { 
    self == 12 ? 0 : self 
  } 
 
  static Integer getPm(Integer self) { 
    self == 12 ? 12 : self + 12 
  } 
} 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接