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

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

 2010-07-27 00:00:00 来源:WEB开发网   
核心提示: 清单 3显示了使用 Java 进行状态机配置的几个问题,首先,演化架构和紧急设计: 使用 DSL(4),阅读这些 Java 代码并不能明确知道这就是状态机配置,和多数 Java API 一样,在 Java 世界几乎看不到这种代码了,现在流行使用 XML 编写配置代码,这只是一堆没有差别的代码,第

清单 3显示了使用 Java 进行状态机配置的几个问题。首先,阅读这些 Java 代码并不能明确知道这就是状态机配置,和多数 Java API 一样,这只是一堆没有差别的代码。第二,冗长且重复。为状态机的每部分设置更多的状态和转换时,变量名重复使用,所有这些重复使代码难于阅读。第三,代码不能满足最初目标 —— 无需重新编译就可配置暗格。

事实上,在 Java 世界几乎看不到这种代码了,现在流行使用 XML 编写配置代码。用 XML 编写配置很简单,如清单 4 所示:

清单 4. 用 XML 编写的状态机配置

 <stateMachine start = "idle"> 
  <event name="doorClosed" code="D1CL"/> 
  <event name="drawerOpened" code="D2OP"/> 
  <event name="lightOn" code="L1ON"/> 
  <event name="doorOpened" code="D1OP"/> 
  <event name="panelClosed" code="PNCL"/> 
 
  <command name="unlockPanel" code="PNUL"/> 
  <command name="lockPanel" code="PNLK"/> 
  <command name="lockDoor" code="D1LK"/> 
  <command name="unlockDoor" code="D1UL"/> 
 
 <state name="idle"> 
  <transition event="doorClosed" target="active"/> 
  <action command="unlockDoor"/> 
  <action command="lockPanel"/> 
 </state> 
 
 <state name="active"> 
  <transition event="drawerOpened" target="waitingForLight"/> 
  <transition event="lightOn" target="waitingForDrawer"/> 
 </state> 
 
 <state name="waitingForLight"> 
  <transition event="lightOn" target="unlockedPanel"/> 
 </state> 
 
 <state name="waitingForDrawer"> 
  <transition event="drawerOpened" target="unlockedPanel"/> 
 </state> 
 
 <state name="unlockedPanel"> 
  <action command="unlockPanel"/> 
  <action command="lockDoor"/>   
  <transition event="panelClosed" target="idle"/> 
  </state> 
 
 <resetEvent name = "doorOpened"/> 
 </stateMachine>     

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

Tags:演化 架构 紧急

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