快速业务通道

演化架构和紧急设计: 使用 DSL - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
复。为状态机的 每部分设置更多的状态和转换时,变量名重复使用,所有这些重复使代码难于阅读。第三,代码不能满足 最初目标 —— 无需重新编译就可配置暗格。

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

时间:2011-08-18 IBM Neal Ford

事实上,在 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>

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

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

演化架构和

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号