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

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

 2010-07-27 00:00:00 来源:WEB开发网   
核心提示: 清单 4中的代码相比 Java 版本有几个优势,第一,演化架构和紧急设计: 使用 DSL(5),延迟绑定,这意味着可以修改代码并将其放进 toaster, 我们没有必要因为 XML 的优势,总是使用 XML,可以使用 XML 解析器阅读配置,第二

清单 4中的代码相比 Java 版本有几个优势。第一,延迟绑定,这意味着可以修改代码并将其放进 toaster,可以使用 XML 解析器阅读配置。第二,对于这个特定问题,这段代码是更富于表现力,因为 XML 包含容器(containership)概念:States 将它们的配置包含为子元素。这有助于删除 Java 版本中令人讨厌的冗余。第三,代码本质上是声明式的。通常,如果您只是进行声明而不需要 if和 while语法,声明式代码更易于阅读。

暂时退后一步,先理解其含义。外化配置在现代 Java 世界中是一种很常见的模式,我们不再认为它是独特实体。实际上这也是每个 Java 框架的特征。配置是一个惯用模式,我们需要捕获方式,使其区别于周围框架的一般行为,并将其分离出来。使用 XML 进行配置,我是使用外部 DSL 编写代码的(句法 [syntax] 是 XML,语法 [grammar] 是由 XML 相关模式定义的),因此不需要重新编译框架代码对其进行转换。

我们没有必要因为 XML 的优势,总是使用 XML。可以考虑以下配置代码,如清单 5 所示:

清单 5. 定制语法(custom-grammar)的状态机配置

 events 
 doorClosed D1CL 
 drawerOpened D2OP 
 lightOn   L1ON 
 doorOpened D1OP 
 panelClosed PNCL 
 end 
 
 resetEvents 
 doorOpened 
 end 
 
 commands 
 unlockPanel PNUL 
 lockPanel  PNLK 
 lockDoor  D1LK 
 unlockDoor D1UL 
 end 
 
 state idle 
 actions {unlockDoor lockPanel} 
 doorClosed => active 
 end 
 
 state active 
 drawerOpened => waitingForLight 
 lightOn  => waitingForDrawer 
 end 
 
 state waitingForLight 
 lightOn => unlockedPanel 
 end 
 
 state waitingForDrawer 
 drawerOpened => unlockedPanel 
 end 
 
 state unlockedPanel 
 actions {unlockPanel lockDoor} 
 panelClosed => idle 
 end 

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

Tags:演化 架构 紧急

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