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

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

 2010-07-27 00:00:00 来源:WEB开发网   
核心提示: 这是一个很好的 内部DSL 例子:DSL 使用基础语言的语法,这意味这个 DSL 必须是符合语法的 Ruby 代码,演化架构和紧急设计: 使用 DSL(7),(因为它是用 Ruby 编写的,可以使用 JRuby 运行,在这个版本中,不需要编写自己的语言或者用尖括弧妨碍自己,就是说,您的 toas

这是一个很好的 内部DSL 例子:DSL 使用基础语言的语法,这意味这个 DSL 必须是符合语法的 Ruby 代码。(因为它是用 Ruby 编写的,可以使用 JRuby 运行,就是说,您的 toaster 所需的全是 JRuby JAR 文件。)

清单 6同定制语言有许多相同的优点。注意,大量使用 Ruby 块充当容器,这能给您同 XML 和定制语言版本一样的容器语义。它比定制语言使用更少的噪音字符(noise characters)。例如,在 Ruby 中 :前缀表明一个符号,在本例中基本上是用作标识符的不变字符串。

使用 Ruby 实现这类 DSL 相当简单,如清单 7 所示:

清单 7. JRuby DSL 的部分类定义

 class StateMachineBuilder 
 attr_reader :machine, :events, :states, :commands 
 
 def initialize 
  @events = {} 
  @states = {} 
  @state_blocks = {} 
  @commands = {} 
 end 
 
 def event name, code 
  @events[name] = Event.new(name.to_s, code) 
 end 
 
 def state name, &block 
  @states[name] = State.new(name.to_s) 
  @state_blocks[name] = block 
  @start_state ||= @states[name] 
 end 
 
 def command name, code 
  @commands[name] = Command.new(name.to_s, code) 
 end 

Ruby 语法比较灵活,这使它适用于此类 DSL。例如,声明一个事件时,不会强制包含一个圆括弧作为方法调用的一部分。在这个版本中,不需要编写自己的语言或者用尖括弧妨碍自己。这更能说明为什么这个方法在 Ruby 世界是如此流行。

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

Tags:演化 架构 紧急

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