`

MDSF:DSL(Domain Specific Language)介绍

阅读更多

前面介绍过模型 驱动开发(MDD)软件 工厂(Software factory)特定领 域建模 DSM(Domain Specific) 等都是高抽象的开发方法,这些方法使用的语言都是特定领域语言(DSL)。相比于通用目的语言 (C#/C++/JAVA/Delphi等)而言,DSL是一种为了特定任务而设计的开发语言,例如SQL是一种专门处理数据库的语言,本篇将介 绍一下DSL。

一种语言

  我们熟知的编程语言(如C#、Ruby等)是一种通用语言,MDA基于UML语言,而模型 驱动开发(MDD) 基于DSL。DSL是一种基于特定领域的语言,它使工作更贴近于客户的理解,而不是实现本身, 这 样有利于开发过程中,所有参与人员使用同一种语言进行交流。

DSML

  DSML是 特定领域模型语言(domain-specific modelling language),之前介绍的MetaEdit+使用的DSM 方 法中使用的就是DSML,它是一种可以用来构建图形模型的一种DSL,DSM的GOPPRR 就 是一个用来构建DSML语言的元模型。

DSL涉及内容

  • 问题域、问题空间
  • 语法、语义
  • 案例、方法、工具

DSL架构

  • DSL脚本(DSL Script):每一个DSL的核心都是一个域模型,它定义了这一语言所代表的各种概念,这些概念的属性,以 及它们之间的关系
    • 在问题域中用于构建、配置或者其他用途的一种语言
    • 可以是文本,也可以是图形,或者两者混合使用
      • 图形语言不只是图表,否则使用Visio之类的画图软件就行了,它实际上是要创建模型,这个模型要能够从概念上描绘你正在创建的系统,并对其内 容进行图表化的表示。一个模型可以同时由多个图表来表示,每个图表表示模型的某个方面
      • 文本语言用户输入,可以快速的打字。
      • 文本语言的优势在于可以进行比较和合并,而图形表达式可以更容易的看出内容之间的关联。
      • 相对来说,文本语言比图形复杂
  • 语义模型(Semantic Model)
    • DSL脚本的一种内存完整表示
    • 有时候这个就是抽象语法树(AST)
    • 分离Parse和Generate
  • 生成代码(Generated Code):DSL的一个最重要的应用是用来生产简单的文本形式的工件,例如源代码、数据库脚本
    • DSL脚本的一种可执行表示
    • 解释语义模型

DSL应用的优点

  1. 高级别的重用:如果仅适用通用编程语言,则每次只能解决一个问题,但如果应用特定领域开发方法设计并实现一些特殊语言,每个特殊语言可以高效地解 决一类相似的问题
  2. 使用DSL的软件架构可以跨接软件工程过程各阶段之间的鸿沟,特别是通过代码生成可以很好的进行设计和实现阶段的衔接
  3. 让领域专家参与开发过程,不仅仅是需求阶段,架构阶段也需要参与
  4. 通过在问题空间工作,可以让不熟悉如何实现技术的人,包括商业人士,也能够更了解模型
  5. 使用DSL表达的模型,可以在问题空间这个较高的抽象层次进行验证,这意味着可以在开发周期的更早期发现因为理解和表述而造成的错误。
  6. 一个模型中具备了重要的业务知识,将解决方案从一种技术迁移到另一种技术,或在同一技术的不同版本之间迁移,就变的相对容易。一般通过适当修改生 成器或解释器就可以做到。

样式(Styles)

  之前在信 息系统开发平台OpenExpressApp:【OpenTest】 之 如何实现自动化测试框架 介绍了在OEA上使用 Ruby语法实现的一个自动化测试语言,这个就属于内部DSL。而OpenExpressApp 对建模支持的初步计划 中介绍的MetaModelEngie属于外部DSL。

  外部DSL可以摆脱内部DSL寄宿语言的限制,可以重新设计一种新的语言,但是增加了学习新的语言的学习成本,并且需要工具的支持。

设计DSL

  为了降低风险,我们并不是马上就从头开始开发框架及其 DSL ,而是应该从现有的可以在某些应用中使用的代码开始,逐步的对其进行参数化,逐步的发现那些在不同应用中变化的部分,然后使这些部分 依赖于DSL。

  自上而下的方法倾向于快速建立一个完整且自包含的模型, 具有更长远的考虑,有助于保证结构的一致性 。但是从另一方面看,这种方法容易导致在概念层设计出很复杂的模型,并且该模型难于实现。因此在 实际应用中,将自上而下和自下而上两种方法交替使用会更有效。 采 用渐进的方式可以避免早期投入过大风险,但是需要定期进行一致性检查。

  在《 Visual Studio DSL工具特定领域开发指南 》书中对设计DSL做了如下步骤:

  1. 识别可变性与发现DSL:DSL是用你的框架具体的实现你的体系架构模 式中可变的部分
  2. 开发领域模型捕获可变性
  3. 定义标记:在适当的地方使用常见标记法或与标记法相关的约定
  4. 开发验证的约束:识别树形之间的依赖性,认出快照中的强制或禁止的循环
  5. 开发并演进框架:理解你的DSL针对的代码体系结构,并在框架中编写它
  6. 测试DSL:包括验证的约束与规则、生成器与命令、以及生成的代码
  7. 演化和移植DSL:确保旧的模型在新版本的DSL中能够使用
  8. 识别好的DSL:范围、最小性、常见标记法,适度的冗余,合理的使用句 法空间,使用用户术语

应用场景

......

书籍

Martin Fowler花了几年时间写了一本DSL的书籍《Domain Specific Languages 》, 我还没有看,感兴趣的可以先看看它在网站上写的系列文章 Domain Specific Languages

Best Practices for DSLs and Model-Driven Development

读书笔 记:Visual Studio DSL工具特定领域开发指南

DSL 的演进


推荐:你 可能需要的在线电子书

分享到:
评论

相关推荐

    敏捷开发:Domain Specific Language

    ### 敏捷开发中的领域特定语言(Domain Specific Language, DSL) #### 一、DSL概念介绍 领域特定语言(Domain Specific Language, DSL)是一种为解决某一特定领域问题而设计的计算机程序设计语言。它通常用于软件...

    Eclipse Modeling Project A Domain-Specific Language (DSL) Toolkit

    《Eclipse Modeling Project: A Domain-Specific Language (DSL) Toolkit》是关于利用Eclipse平台进行领域特定语言(DSL)开发的重要资源。DSL是一种为特定领域或问题设计的编程语言,通常比通用编程语言更为简洁、...

    Domain Specific Languages(martin fowler)

    通过以上对《Domain Specific Languages》这本书的概述和关键知识点的详细解读,我们可以深刻地认识到DSL在软件开发中的重要性和潜力。无论是对于软件架构师、开发人员还是领域的专家来说,掌握DSL的设计和实现方法...

    SQL DSL (Domain Specific Language) for Kotlin and Java. Su.zip

    SQL DSL(领域特定语言)是为特定编程语言设计的、用于简化数据库操作的专用语法。在Kotlin和Java中,SQL DSL提供了一种更简洁、类型安全的方式来编写SQL查询,使得开发者可以像编写代码一样编写SQL,提高了开发效率...

    Visual Studio 2005 Team Edition软件架构系列课程(4):模型驱动开发的领域特定语言(Domain Specific Language )工具

    在这一系列课程中,我们重点关注Visual Studio 2005 Team Edition中的一个重要工具集——模型驱动开发的领域特定语言(Domain Specific Language,DSL)工具。这些工具提供了一种高效的方法,使开发人员能够为特定...

    On the Use of Cryptol, a Cryptography Domain Specific Language

    1. Cryptol是一门领域特定语言(Domain Specific Language,DSL),专门用于实现密码算法。它允许代码更直观地反映算法本身的操作,而不是更加抽象的代码。 2. 在常规编程语言中实现密码算法时会遇到很多问题,主要...

    Addison.Wesley.Domain.Specific.Development.with.Visual.Studio.DSL.Tools.May.2007.pdf

    《特定领域开发与 Visual Studio DSL 工具》是微软.NET开发系列书籍之一,主要介绍了如何利用 Visual Studio 的 Domain Specific Language (DSL) 工具进行高效、专业的软件开发。本书由 Steve Cook、Gareth Jones、...

    Implementing.Domain.Specific.Languages.with.Xtext.and.Xtend.2nd.Ed

    Leverage the latest features of Xtext and Xtend to develop a domain-specific language. Integrate Xtext with popular third party IDEs and get the best out of both worlds. Discover how to test a DSL ...

    DSLs in Boo Domain Specific Languages in .NET

    领域特定语言(Domain Specific Languages,简称DSLs)是一类专为解决特定问题领域而设计的编程语言。它们通常具有高度抽象、易于理解和使用的特性,使得在特定领域内的开发工作更为高效。在.NET框架下,DSLs的应用...

    Groovy DSL

    域特定语言(Domain Specific Language, DSL)是指专门为解决某一特定领域问题而设计的计算机语言。与通用编程语言相比,DSL具有更高的抽象级别,更加专注于特定领域的细节,因此能够提供更简洁、更易于理解的语法。...

    [Xtext Xtend] 领域特定语言 (Xtext & Xtend 实现) (英文版)

    Learn to quickly develop a domain-specific language with Xtext Implement any aspect of a DSL using Xtend, a fully featured Java-like programming language Discover how to test a DSL implementation and ...

    Manning.DSLs.in.Boo.Domain.Specific.Languages.in.NET.Jan.2010

    《DSLs in Boo: Domain Specific Languages in .NET》是一本由Manning出版社于2010年1月发行的专业技术书籍,主要探讨了在.NET框架下如何使用Boo语言来构建领域特定语言(DSLs)。这本书是针对那些对DSLs有深入兴趣...

    Eclipse Modeling Project(A Domain-Specific Language Toolkit)

    ### Eclipse Modeling Project (EMP): A Domain-Specific Language Toolkit #### 概述 《Eclipse Modeling Project:一种领域特定语言(DSL)工具包》是Richard C. Gronback编写的一本全面介绍Eclipse Modeling ...

    适用于Android触摸事件的域特定语言:第1部分:DSL的描述和用法

    DSL(Domain-Specific Language)是一种专门针对特定领域设计的语言,它允许开发者以更接近自然语言的方式编写代码,简化复杂任务。 DSL在Android触摸事件中的应用旨在解决传统事件处理机制的繁琐性。在Java中,...

    android-practice:DSL 实验室 1

    在安卓应用开发中,DSL(Domain Specific Language)是一种专门针对特定领域的编程语言,它使得代码更加简洁、易读,尤其在配置和构建过程中。在这个"android-practice:DSL 实验室 1"项目中,我们可以深入理解如何在...

    The Definitive ANTLR Reference--Building Domain Specific Languages.pdf

    ANTLR(Another Tool for Language Recognition)是一种强大的解析器生成工具,用于处理各种语言的语法。它支持多种编程语言,如Java、C#等,并能够生成高效的解析器和词法分析器。《The Definitive ANTLR Reference...

    dsl2code:DSL转换原始文件(reactvue)

    DSL(Domain-Specific Language)是一种特定于某个领域的编程语言,它设计用于解决某一类问题,通常比通用编程语言更为简洁和高效。DSL2Code是一个工具,它可以将DSL语法转换为原始代码,例如React或Vue.js的组件...

    DSLTicket:DSL 票务系统 NAK

    DSLTicket是一个基于DSL(Domain Specific Language)的票务系统,主要使用Java编程语言进行开发。在深入探讨这个系统之前,我们首先需要理解DSL的概念。DSL是一种特定于某个领域的编程语言,它专注于解决某一类问题...

Global site tag (gtag.js) - Google Analytics