`
lazing
  • 浏览: 23832 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

DSL之二 使用DSL

    博客分类:
  • MDA
阅读更多

这篇笔记的内容来自MF http://martinfowler.com/dslwip/UsingDsls.html

领域特殊语言(Domain Specific Language)定义

a computer programming language of limited expressiveness focused on a particular domain.

关注特定领域表述有限的计算机程序语言

四个重要元素

  • computer programming language:A DSL is used to humans to instruct a computer to do something, as well as helping communication between humans.
    计算机语言 DSL帮助用户与计算机交互,同时辅助人与人的交流。
  • language nature: A DSL is a programming language, and as such should have a sense of fluency where the expressiveness comes not just from individual expressions but also the way they can by composed together.
    语言属性 DSL是一个程序语言,拥有流畅的表述形式,且能够组合完成逻辑。
  • limited expressiveness: a general purpose programming language provides lots of capabilities, supporting varied data, control, and abstraction structures. All of this is useful but makes it harder to learn and use. A DSL supports a bare minimum of features needed to support its domain. You can’t build an entire software system in a DSL, rather you use a DSL for one particular aspect of a system.
    有限的表述 与通用语言相比,DSL应当只对针对的领域做有限的支持,因此,不应当用DSL实现一个完整的应用。
  • domain focus: a limited language is only useful if it has a clear focus on a limited domain. The domain focus is what makes a limited language worthwhile.
    领域关注 当明确针对一个特定领域时,有限语言显得非常有用。

DSLs的边界

DSLs的边界很难明确定义,有些语言和工具,在针对特殊问题是表现了DSL的某种特性,但是他们并不能算做DSLs

If a uses a DSL for its purpose then it stays a DSL, but if someone uses a DSL in a general purpose manner, then it’s no longer a DSL (in this usage).

这种模糊并不关键,只要工具有用就行了,使用DSL的观点设计和使用软件,是否能够给软件工程带来总体上的优越性是我们主要关注的课题。

DSL片段与独立程序

DSL可以是一个独立的程序,构建于整体模型之上;也可以是一段执行片段,比如正则表达式,嵌入程序中的SQL等等。

使用DSL的理由

加快开发效率(Improving Development Productivity)

DSL产生了更加简洁,有效的代码,更好的遵守DRY原则,同时有限的语言也避免了很多程序错误的产生。

促进与领域专家的沟通 (Communication with Domain Experts)

这里不是说一个COBOL式的幻想,我们不主张让领域专家来用DSL编写业务规则,程序就能够运行。不过DSL简洁生动的语法,的确更容易被领域专家阅读和接受,从而缩小业务模型与程序模型之间的差距。

在执行上下文中改变 Change in Execution Context

在执行上下文中改变。从而极大的提高了系统的配置化程度,提升其应用功能价值。

可替换的计算模型 Alternative Computational Model

基于领域模型之上,可以更加灵活的设计计算模型,从而完成业务沉淀。

DSLs存在的问题

  • 学习曲线
    任何一项技术都是有难度的
  • 构建花费
    构建DSL要求更加精确,但其花费并不是在DSL,而在构建模型本身。
  • 设计难度
    DSL很难设计,因为它就像类库一样,因此,这种难度也不是DSL带来的,应当是问题域本身的难度。
  • 新的DSL的学习难度
    DSL构建出来的语言也是需要学习的,不过这取决于DSL本身的设计。
  • DSL版本迁移
    API已经有很多重构的工具和方法可以使用,DSL还缺乏这些东西,当然内置式的DSL完全可以用载体语言来实现。

DSLs生命周期

很多不同的方式:

Model –> API –> DSL

DSL –> senarios –> functions

Frameworks –> controllers –> DSL

2字节(2byte.us)

0
6
分享到:
评论

相关推荐

    DSL论坛-DSL介绍

    #### 二、DSL技术分类与发展历程 根据ITU(国际电信联盟)的标准,目前主要有以下几种DSL技术: 1. **ADSL (Asymmetric Digital Subscriber Line)**: - 标准:G.992.1 / G.dmt (1999年) - 最大下行速率:7Mbps ...

    LSM6DSL应用手册

    本文手册主要提供了关于LSM6DSL的使用信息和应用提示,深入讲解了如何进行数据读取、配置唤醒模式、实现计步功能等。 首先,LSM6DSL通过其I2C/SPI串行接口标准输出数据,能够执行在高性能模式下以0.65mA的低功耗。...

    packet tracer dsl modeml连接实验

    Packet Tracer DSL.Modem 连接实验是使用 Packet Tracer 软件模拟远程拨号通信,连接两台远程主机,使其能互相通信的实验。实验中使用了 DSL.Modem 和云图,连接网络,模拟远程拨号通信。 一、实验配置 实验配置...

    KotlinDSL.zip

    Kotlin DSL(Domain Specific Language)是一种使用Kotlin语言构建的特定领域语言,它允许我们以更简洁、更直观的方式编写构建脚本,特别是针对Gradle构建系统。在Android开发中,Kotlin DSL已经成为Gradle构建脚本...

    elasticSearch查询语句DSL

    同时,我们还将介绍布尔查询、should查询和must_not查询等与逻辑关系相关的查询语句,帮助您更好地理解DSL的灵活性和强大之处。此外,我们还将深入讨论聚合操作在DSL中的应用。通过使用聚合查询,您可以对检索结果...

    840Dsl v4.5 toolbox

    在使用840DSL v4.5 Toolbox时,确保遵循西门子的官方指导,定期检查更新,并且了解相关安全规定,以确保高效且安全的设备操作。同时,熟悉并掌握这款工具的各个功能对于提升工作效率和优化生产流程至关重要。

    西门子840Dsl基本软件和操作软件

    为了便于用户更好地了解和使用西门子840Dsl,本知识点将从其基本软件和操作软件、数控系统操作方法、OPC UA数据获取、二次开发、NCU操作系统以及PCU基础软件等方面进行详细阐述。 西门子840Dsl基本软件和操作软件是...

    840Dsl读取S120电流步骤

    7. 选择第六步生成的xx.val文件,随之该文件被加载到Simatic Manager中的Sources中。 8. 编译第九步中的xx.val文件,随后在Blocks中生成相应的DB块。 9. 通过调用FB2块读取电流(一个FB2块仅能读取一个轴的参数值;...

    dsl-1.2.7-API文档-中文版.zip

    赠送jar包:dsl-1.2.7.jar; 赠送原API文档:dsl-1.2.7-javadoc.jar; 赠送源代码:dsl-1.2.7-sources.jar; 赠送Maven依赖信息文件:dsl-1.2.7.pom; 包含翻译后的API文档:dsl-1.2.7-javadoc-API文档-中文(简体)版...

    lsm6dsl源码

    2. **初始化配置**:在使用LSM6DSL前,需要对其进行初始化配置,包括设置工作模式(如连续模式或单次测量模式)、数据速率、滤波器配置、灵敏度等级等。 3. **寄存器操作**:LSM6DSL的配置和数据读取是通过对传感器...

    groovy 一个不错的文档 实现dsl

    标题与描述均指向了一个关于如何使用Groovy语言实现领域特定语言(Domain-Specific Language, DSL)的文档。这表明文档将介绍Groovy在DSL设计与实现方面的特性和优势。 #### 标签解读 - **标签**: "groovy for dsl...

    dsl.rar_dsl

    DSL(Domain-Specific Language,领域...因此,理解和掌握如何在VHDL中构建和使用DSL对于硬件工程师来说是一项重要的技能。通过分析和学习“dsl.txt”中的代码,你可以深入理解这一技术,并将其应用到自己的项目中。

    DSL测试方案.

    DSL测试方案的知识点涵盖了宽带DSL接入方式下的运营维护问题,并提出了相应的自动测试解决方案以及对其中的关键技术点进行讨论。以下是对文中提及的关键知识点的详细说明: 1. DSL测试的背景与意义 - 宽带DSL接入...

    西门子840DSL配置豪华手轮

    5. 在网络设置选项卡中,选择187.5Kbps的传输速率,这是MPI的标准速率之一,确保数据交换的高效性。 6. 编译并保存硬件配置,确保配置无误。 接下来是SIMATIC 300站点的添加与配置: 7. 添加一个新的SIMATIC 300...

    DSL-6641K使用說明

    中華電信使用的設備 DSL-6641K port forwarding,防火牆,無線網路設定

    828D_840Dsl_工具_EasyXML_例程合集.zip

    标题中的“828D_840Dsl_工具_EasyXML_例程合集.zip”表明这是一个关于828D和840DSL数控系统使用的工具——EasyXML的相关程序集合,存放在一个zip压缩文件中。828D与840DSL是西门子数控系统(Siemens Numerical ...

    lsm6dsl_官方驱动+中英文文档.7z

    中文文档使得国内开发者能够更方便地理解并使用该传感器,而英文文档则提供了原始的技术细节,对于深入研究和调试很有帮助。 5. **应用开发**:通过结合LSM6DSL的加速度计和陀螺仪数据,开发者可以实现各种复杂的...

    840DSL操作手册

    西门子840DSL是一款由西门子公司推出的高端数控系统,用于机械加工和生产制造领域。本操作手册是为操作人员设计的,旨在帮助他们理解并正确使用该系统。手册详细说明了数控机床的基础知识、编程方法、以及操作西门子...

    西门子840Dsl利用PC备份PCU50的数据

    #### 知识点二:PCU50简介 PCU50是西门子为840Dsl数控系统设计的人机交互界面(HMI)。作为操作者与数控系统之间的桥梁,PCU50提供了直观的操作界面和强大的功能支持,如图形显示、参数设置等。它通过网络与840Dsl...

    840Dsl_S120_参数手册

    S120是西门子提供的驱动器系列,与840Dsl配合使用,可以实现对机床运动的精确控制。 文件描述中提到“超清晰版,需要的人可以下载看看”,说明该手册可能是一个高分辨率版本的电子文档,可以通过网络下载获得。手册...

Global site tag (gtag.js) - Google Analytics