前面介绍过模型 驱动开发(MDD) 、软件 工厂(Software factory) 、特定领 域建模 DSM(Domain Specific) 等都是高抽象的开发方法,这些方法使用的语言都是特定领域语言(DSL)。相比于通用目的语言 (C#/C++/JAVA/Delphi等)而言,DSL是一种为了特定任务而设计的开发语言,例如SQL是一种专门处理数据库的语言,本篇将介 绍一下DSL。
我们熟知的编程语言(如C#、Ruby等)是一种通用语言,MDA基于UML语言,而模型 驱动开发(MDD) 基于DSL。DSL是一种基于特定领域的语言,它使工作更贴近于客户的理解,而不是实现本身, 这 样有利于开发过程中,所有参与人员使用同一种语言进行交流。
DSML是 特定领域模型语言(domain-specific modelling language),之前介绍的MetaEdit+使用的DSM 方 法中使用的就是DSML,它是一种可以用来构建图形模型的一种DSL,DSM的GOPPRR 就 是一个用来构建DSML语言的元模型。
之前在信 息系统开发平台OpenExpressApp:【OpenTest】 之 如何实现自动化测试框架 介绍了在OEA上使用 Ruby语法实现的一个自动化测试语言,这个就属于内部DSL。而在OpenExpressApp 对建模支持的初步计划 中介绍的MetaModelEngie属于外部DSL。
外部DSL可以摆脱内部DSL寄宿语言的限制,可以重新设计一种新的语言,但是增加了学习新的语言的学习成本,并且需要工具的支持。
为了降低风险,我们并不是马上就从头开始开发框架及其 DSL ,而是应该从现有的可以在某些应用中使用的代码开始,逐步的对其进行参数化,逐步的发现那些在不同应用中变化的部分,然后使这些部分 依赖于DSL。
自上而下的方法倾向于快速建立一个完整且自包含的模型, 具有更长远的考虑,有助于保证结构的一致性 。但是从另一方面看,这种方法容易导致在概念层设计出很复杂的模型,并且该模型难于实现。因此在 实际应用中,将自上而下和自下而上两种方法交替使用会更有效。 采 用渐进的方式可以避免早期投入过大风险,但是需要定期进行一致性检查。
在《 Visual Studio DSL工具特定领域开发指南 》书中对设计DSL做了如下步骤:
Martin Fowler花了几年时间写了一本DSL的书籍《Domain Specific Languages 》, 我还没有看,感兴趣的可以先看看它在网站上写的系列文章 Domain Specific Languages
Best Practices for DSLs and Model-Driven Development
读书笔 记:Visual Studio DSL工具特定领域开发指南
DSL 的演进