《DSL》笔记一、什么是DSL(转)
1.1、问题域与解答域
1.1.1、什么是DSL?
DSL(Domain-Specific Language)全称领域专用语言,就是专门用户特定领域的语言,看着概念觉得挺高大上的,其实很简单,就是专门用于某一个领域使用的语言。举个例子,我们在设置页面样式时,就经常使用CSS样式,那么这CSS语言就是在网页样式设计这一领域专门使用的语言,CSS就是一种DSL;同理,在数据库中使用的SQL,只能在数据库中使用,也是一种DSL。在问题域里面复杂的业务,在解答域中使用DSL语言应该能得到恰当的实现。
1.1.2、那么什么是问题域与解答域?
我们一般把分析业务的那些过程、实体和约束条件称为问题域。业务越复杂,问题域就越复杂。
问题域的分析模型是用解答域提供的工具和手段实现出来的,问题域的元素需要映射成解答域中十点过的技术手段,比如面向对象中的类、对象和方法就是解答域的基本组件。你可以把这些组件组合起来,成为更大的组件。
1.2、DSL与通用编程语言的区别
DSL语言只需要针对一个特定的问题领域就可以了;用DSL编程时只需要处理问题域的复杂性(业务的复杂性),你不用管解答域具体是怎么实现的,因为都使用一定的抽象层次封装起来了;DSL还能够做到给用户使用和阅读(这要求开发者在DSL实现时抽象要合理)
1.3、初窥DSL
1.3.1、DSL对业务用户来说有什么好处?
上面提到DSL用户都能阅读,这样对酬金来说,政策配置的有没有问题,业务用户可以自己去阅读和修改,这是非DSL做不到,比如下面四川酬金中配置的分段条件是用C语言来配置的,用户谁能看懂啊,没有编程经验的估计都看不大懂,这里我给大致解释下下面代码的含义,逻辑复杂度一致即可,并不是实际的业务——“当该业务正在打折时,总金额为该业务笔数(v_dci1 比如从数据库中查询得知)乘以折后单价;如果没打折,为业务笔数乘以折前单价”,是不是觉得中文这么简单的一句话,用现在的C实现是不是太复杂了。

1、DSL要为问题域制品提供直接的映射,如酬金问题域有一个名为Trade交易的实体,那么DSL脚本就必须包含同样名称同样角色的一个抽象概念;
1、使用领域高度抽象的概念,更具表现力,用户更喜欢,跟C实现的分段条件一比就知道了
《DSL》笔记一、什么是DSL(转)的更多相关文章
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档
问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...
- DSL简介(转)
DSL编程:有人将DSL编程称之为声明式(Declarative)编程.DSL是在模型之上建立的一种更加灵活的对 模型化的理解和使用方式.语义模型是DSL的核心.内部DSL:用通用语言的语法表示DSL ...
- Atitit dsl exer v3 qb3 新特性
Atitit dsl exer v3 qb3 新特性 /atiplat_cms/src/com/attilax/dsl/DslParser.java V3 支持typeed参数,与简化的notyp参数 ...
- Elasticsearch(入门篇)——Query DSL与查询行为
ES提供了丰富多彩的查询接口,可以满足各种各样的查询要求.更多内容请参考:ELK修炼之道 Query DSL结构化查询 Query DSL是一个Java开源框架用于构建类型安全的SQL查询语句.采用A ...
- Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725
Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725 1. DSL主要分为三类:外部DSL.内部DSL,以及语言工作台. 1 2. DSL ...
- Paip.声明式编程以及DSL 总结
Paip.声明式编程以及DSL 总结 1.1 声明式编程DSL 1.2 声明式语言) 1.3 声明式编程框架AOP实现 1.4 应用场合 1.5 ...
- 使用Antlr实现简单的DSL
为什么要使用DSL DSL是领域专用语言,常见的DSL有SQL,CSS,Shell等等,这些DSL语言有别于其他通用语言如:C++,Java,C#,DSL常在特殊的场景或领域中使用.如下图: 领域专用 ...
- 简述 Ruby 与 DSL 在 iOS 开发中的运用
阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain Specific Language) 翻译成中文就是:"领域特定语言".首先,从定义就 ...
- BDD 与DSL 入门
正文: Behavior Driven Development,行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者.QA和非技术人员或商业参与者之间的协作.在了解Behavior Driv ...
随机推荐
- kafka参数解析+启动参数解析
Kafka参数详解 每个kafka broker中配置文件server.properties默认必须配置的属性如下: broker.id=0 num.network.threads=2 num.io. ...
- [转帖]为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用
为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用 原创Clement-Xu 发布于2015-07-17 15:53:14 阅读数 57066 收藏 展开 HiKariCP是 ...
- idea(2018.3.5)破解
第一步:下载idea,https://www.jetbrains.com/idea/download/#section=windows,双击进行安装 第二步:下载破解的jar包:链接:https:// ...
- 【Go】go的日志框架-logrus初探
summary logrus是针对go语言开发的一款日志系统,在本片文章中,将会对上手logrus的过程中遇到的一些问题做一个记录.这个记录参考了这篇文章.下面我们开始吧! 上手 package ma ...
- windows上 nginx 配置代理服务,配置多域名,以及最简单实现跨域配置
Nginx,不用多说啦,大家都熟悉的不能再熟悉了,它是一款轻量级的高性能Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,最近在本地研究将nginx和resin配合使用,使服务 ...
- ML学习笔记之Anaconda中命令形式安装XGBoost(pip install)
0x00 概述 在没有安装XGBoost之前,import xgboot会出错,如下: # ModuleNotFoundError: No module named ‘xgboost’ 0x01 安装 ...
- 使用php函数防止SQL注入方法
什么是SQL注入? SQL注入是指在你系统防御之外,某人将一段Mysql语句注入到你的数据库.注入通常发生在系统要求用户输入数据的时候,比如用户名的输入,用户可能输入的不是一个用户名,而是一段SQL语 ...
- 2019 花椒直播java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.花椒直播等公司offer,岗位是Java后端开发,因为发展原因最终选择去了花椒直播,入职一年时间了,也成为了面 ...
- robotframework-ride1.7.3.1更新安装
在2019年之前,robotframework-ride的版本一直是1.5.2.1,是2016年1月份的版本,里面需要使用 wxPython2.8-win64-unicode-2.8.12.1-py2 ...
- CentsOS原生RabbitMQ安装过程
版本依赖问题 RabbitMQ安装时与Erlang的版本一定要保持以下的对应关系,否则会引发无法启动的问题 安装Erlang 下载Erlang依赖 1 wget http://erlang.org/d ...