DSL简介(转)

DSL简介(转)转 http blog csdn net u0 article details 领域专用语言简介主要回答几下几个问题 1 什么是 DSL2 为什么使用 DSL3 何时使用 DSL 什么是 DSLDSL DomainSpecif 领域专用语言 要理解什么是领域专用语言 需要先了解其创建背景 即为什么会诞生这样

转:http://blog.csdn.net/u0/article/details/

领域专用语言简介

什么是 DSL

共同语言称为解决方案模型构建者用来表达解决方案中的词汇的基础。构建者将这些共同语言对应到模型中,在程序中就是模块名、在数据模型中就是实体名、在测试用例中就是对象。

在上面的描述,可以看到在需求收集的过程中,如果要成功构建模型,则需要一种领域专家和构建者(也就是通常的领域分析师/业务分析师)都能理解的“共同语言”。但是这种共同语言的创建过程没有保证,不能够保证在收集过程中得到的信息完整的描述了领域活动中所有的业务规则和活动。

如果能够让领域专家通过简单的编程方式描述领域中的所有活动和规则,那么就能在一定程度上保证描述的完整性。

DSL 就是为了解决这个问题而提出的。

常见的 DSL

  • 软件构建领域 Ant
  • UI 设计师 HTML
  • 硬件设计师 VHDL

DSL 的特点

  • 用于专门领域,不能用于其他领域
  • 表现力有限
  • 不描述解答域,仅描述问题域

DSL 与通用编程语言的区别

  • DSL 供非程序员使用,供领域专家使用
  • DSL 有更高级的抽象,不涉及类似数据结构的细节
  • DSL 表现力有限,其只能描述该领域的模型,而通用编程语言能够描述任意的模型

DSL 分类

根据是否从宿主语言构建而来,DSL 分为:

  • 内部 DSL(从一种宿主语言构建而来)
  • 外部 DSL(从零开始构建的语言,需要实现语法分析器等)

还有一种属于外部DSL的“非文本DSL”,即尽量使用图形化表述。比如 JetBrains 的 MPS。

我们通常所用的框架实际上就是一种内部 DSL。比如 Rails 框架就是基于 Ruby 的用于 Web 开发领域的内部 DSL。

如何构建 DSL

构建DSL 要满足三个原则:

  • 能够完整描述领域
  • 简单易用
  • 隐藏实现细节

何时使用 DSL

DSL 的构建难度比较大,从零构建不合适。建议使用比较完善的构建。

背后的概念

DSL 是在需求分析阶段中为了解决需求收集过程中需求描述方(遇到问题方/问题描述者[注意:遇到问题方通常是客户或者用户,而描述方通常是出现该问题的所在行业的专家,这两个角色可能是同一个人,也可能是不同的人])与解决方案提供方(构建者)间互相理解困难而设计的专门工具。在需求收集中,首先需要理解问题方遇到的问题,然后将其映射到解决方案提供方的解决技术上。用术语描述的话,问题描述者(描述领域活动的背景和问题)称为“领域专家”,其使用“行话”来说明;解决方案提供者称为“模型构建者”,其通过对领域活动及其问题的理解,加上对技术解决方案的理解,提出解决方案模型。该模型最终映射到技术方案中。这个过程中的活动成为“领域分析/领域建模”。其目的是确定并理解领域中的重要元素、过程以及其间的关系。

简单的领域建模

参考

转载于:https://www.cnblogs.com/wangle1001986/p/8007521.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219022.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:58
下一篇 2026年3月17日 下午10:58


相关推荐

  • SpringBoot注解最全详解(整合超详细版本)

    SpringBoot注解最全详解(整合超详细版本)使用注解的优势 1 采用纯 java 代码 不在需要配置繁杂的 xml 文件 2 在配置中也可享受面向对象带来的好处 3 类型安全对重构可以提供良好的支持 4 减少复杂配置文件的同时亦能享受到 springIoC 容器提供的功能一 注解详解 配备了完善的释义 可采用 ctrl F 来进行搜索哦 SpringBootAp

    2026年3月20日
    2
  • 解决docker容器部署dubbo服务时,注册到注册中心的地址是docker容器内的地址

    解决docker容器部署dubbo服务时,注册到注册中心的地址是docker容器内的地址

    2021年8月3日
    73
  • Pycharm中运行Python代码的几种方式

    Pycharm中运行Python代码的几种方式Pycharm 中运行 Python 代码的几种方式 nbsp nbsp 在 pycharm 中的 Python 代码运行会出现各种奇葩的问题 比如 密码输入时不显示或没有提示 给我们带来一些麻烦 下面介绍几种代码运行的几种方式 nbsp nbsp 一 直接运行 Run 按钮或者快捷键 shift F10 nbsp nbsp 1 进入 pychram 主界面 输入代码后 直接 Run 就可以 nbsp nbsp 2 Termnal 下运行 py 文件

    2026年3月27日
    1
  • python微信刷屏_拍一拍,微信史上最短一行代码

    python微信刷屏_拍一拍,微信史上最短一行代码今日推文说明二条:Python办公自动化|从Word到Excel三条:17个Python的牛逼骚操作,你都OK吗?↑关注+星标,后台回复【大礼包】送你Python自学大礼包图片来自不正经程序员…

    2022年5月23日
    49
  • python 删除文件、清空目录的方法总结

    python 删除文件、清空目录的方法总结Pythonos.remove()方法os.remove()方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。在Unix,Windows中有效以下实例演示了remove()方法的使用:#!/usr/bin/python#-*-coding:UTF-8-*-importos,sys#列出目录print”目录为:%s”%os…

    2022年5月30日
    249
  • JavaCV 第一个JavaCV程序

    JavaCV 第一个JavaCV程序JavaCV 第一个 JavaCV 程序 JavaCV 简介 JavaCV 是一个计算机视觉领域的封装库 封装了包括 OpenCV FFmpeg 等 GitHub https github com bytedeco javacv 顺便附上 OpenCV 的文档地址 https docs opencv org master 第一个 JavaCV 程序使用 J

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号