快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

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

时间:2011-08-18 IBM Neal Ford

简介:至今, 演化构架和紧急设计 主要关注技术模式的紧急设计,本期将介绍使用特定领域语言 (DSL)捕获 领域惯用模式。系列作者 Neal Ford 用一个例子说明了该方法,显示了这种获取惯用模式 的抽象样式的优势。

惯用模式可以是 技术也可以是 领域。技术模式为常用的技术软件问题指出解决方案,例如在应用程 序(或应用程序套件)中怎样处理验证、安全和事务数据。前几期主要关注获取技术惯用模式所用的技术 ,例如元程序设计。域模式关注的是如何抽象常见业务问题。而技术模式几乎出现在所有的软件中,域模 式之间的差异与业务之间的差异一样大。然而获取它们有一套丰富的技术,这就是本期以及后续几期将要 谈论的话题。

本文为使用 DSL 技术作为一种抽象样式获取域模式提供动力,DSL 提供多种选择,包括自己命名的模 式。Martin Fowler 最近的一本书对 DSL 技术有较为深入的研究。在后续几期中,我会使用他的许多模 式名,也会将他的示例用于我的例子中,逐步讲述具体技术。

DSL 的动机

为什么我们要费 那么多周折创建一个 DSL ?仅仅为了获取一个惯用模式?正如我在 “利用可重用代码,第 2 部分 ” 中指出的,区分惯用模式的最好方法就是让它看起来与其他代码不一样。这种看得见的不同是最 直接的线索,您不需要再看常规 API。同样,使用 DSL 的目的之一是写代码,使这些代码看起来不像源 代码而更像您正在尝试解决的问题。如果能够达到这个目标(或者接近这个目标),那您将填补软件项目 中的这一空白,为开发人员和业务涉众的沟通架起了桥梁。允许用户阅读您的代码很有必要,因为这消除 了将代码转换为语言的需求,这是项很容易出错的工作。让您的代码对于非技术人员是易读的,因为他们 了解软件的预期设想,这样你们之间就会有更多的交流。

为激励开发人员使用这种技术,我将借 用 Fowler DSL 书中的例子。假设我正为一家制作软件控制的暗格(secret compartments,想想 James Bond)的公司工作。公司的一个客户,H. 夫人,想要在她的卧室里装一个暗格。然而我们公司使用 .com 泡沫破碎后留下的 Java™驱动的 toasters 来运行软件。尽管 toasters 比较便宜,但更新其中的 软件却很昂贵,因此我需要创建基础暗格代码,然后将其永久地设置在 toasters 上,然后找到一种方法 根据每位用户的需求进行配置。您也知道,在现代软件世界中,这是一个很常见的问题:普遍行为不常改 变,而配置需要根据个人情况进行改变。

H. 夫人想要一个暗格,打开这个暗格的方法是:首先关闭卧室门,接着打开梳妆台的第二个抽屉,最 后打开床头灯。这些活动必须依次进行,如果打乱次序,必须重头开始。您可以将控制暗格的软件想象为 一个状态机,如图 1 所示:

图 1. H. 夫人的暗格是状态机

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

时间:2011-08-18 IBM Neal Ford

基本状态机 API 比较简单。创建一个抽象事件类,可以同时处理状态机内的事件和命令,如清单 1 所示:

清单 1. 状态机的抽象事件

public class AbstractEvent {   private String name, code;   public AbstractEvent(String name, String code) {    this.name = name;    this.code = code;   }   public String getCode() { return code;}   public String getName() { return name;}

可以使用另一个简单类 States对状态机中的状态建模,如清单 2 所示 :

清单 2. 状态机类的开始部分

public class States {   private State content;   private List<TransitionBuilder> transitions = new  ArrayList<TransitionB

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号