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

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

 2010-07-27 00:00:00 来源:WEB开发网   
核心提示: XML 版本有的优势,它也有:是声明式的,演化架构和紧急设计: 使用 DSL(6),有容器概念,并且是简明的,将很高兴知道这些工具已经变得好多了,这个例子来自 Fowler 的书中,同时它也超越了 XML 和 Java 版本,因为它很少有 噪音字符(例如 <和 >)

XML 版本有的优势,它也有:是声明式的,有容器概念,并且是简明的。同时它也超越了 XML 和 Java 版本,因为它很少有 噪音字符(例如 <和 >),尽管这对技术实现是必需的,但是影响可读性。

此版配置代码是一个用 ANTLR 编写的定制外部 DSL,也是一个开源工具,它使得用自定义语言编写变得很容易。曾经在大学时候不喜欢编译器(包括诸如 Lex 和 YACC 之类的经典工具)课程的人,将很高兴知道这些工具已经变得好多了。这个例子来自 Fowler 的书中,他说构建 XML 版本和构建定制语言版本所用时间相同。

清单 6 中的是用 Ruby 写的另一种可选版本 :

清单 6. JRuby 中的状态机配置

 event :doorClosed, "D1CL" 
 event :drawerOpened, "D2OP" 
 event :lightOn, "L1ON" 
 event :doorOpened, "D1OP" 
 event :panelClosed, "PNCL" 
 
 command :unlockPanel, "PNUL" 
 command :lockPanel, "PNLK" 
 command :lockDoor, "D1LK" 
 command :unlockDoor, "D1UL" 
 
 resetEvents :doorOpened 
 
 state :idle do 
 actions :unlockDoor, :lockPanel 
 transitions :doorClosed => :active 
 end 
 
 state :active do 
 transitions :drawerOpened => :waitingForLight, 
       :lightOn => :waitingForDrawer 
 end 
 
 state :waitingForLight do 
 transitions :lightOn => :unlockedPanel 
 end 
 
 state :waitingForDrawer do 
 transitions :drawerOpened => :unlockedPanel 
 end 
 
 state :unlockedPanel do 
 actions :unlockPanel, :lockDoor 
 transitions :panelClosed => :idle 
 end  

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

Tags:演化 架构 紧急

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