演化架构和紧急设计: 使用 DSL
2010-07-27 00:00:00 来源:WEB开发网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
更多精彩
赞助商链接