一、领域特定语言(DSL)

领域特定语言(DSL)通常被定义为一种特别针对某类特殊问题的计算机语言,它不打算解决其领域外的问题。对于DSL的正式研究已经持续很多年,直 到最近,在程序员试图采用最易读并且简炼的方法来解决他们的问题的时候,内部DSL意外地被写入程序中。近来,随着关于Ruby和其他一些动态语言的出 现,程序员对DSL的兴趣越来越浓。这些结构松散的语言给DSL提供某种方法,使得DSL允许最少的语法以及对某种特殊语言最直接的表现。

这里将描述怎样使用Java语言来编写领域特定语 言,并将建议一些组建DSL语言时可采用的模式。

Java适合用来创建内部领域特定语言吗?

在我们审视Java语言是否可以作为创建DSL的工具之前,我们首先需要引进“内部DSL”这个概念。一个内部DSL在由应用软件的主编程语言创 建,对定制编译器和解析器的创建(和维护)都没有任何要求。Martin Fowler曾编写过大量各种类型的DSL,无论是内部的还是外部的,每种类型他都编写过一些不错的例子。但使用像Java这样的语言来创建DSL,他却 仅仅一笔带过。

另外还要着重提出的很重要的一点是,在DSL和API两者间其实很难区分。在内部DSL的例子中,他们本质上几乎是一样的。在联想到DSL这个词汇 的时候,我们其实是在利用主编程语言在有限的范围内创建易读的API。“内部DSL”几乎是一个特定领域内针对特定问题而创建的极具可读性的API的代名 词。

任何内部DSL都受它基础语言的文法结构的限制。比如在使用Java的情况下,大括弧,小括弧和分号的使用是必须的,并且缺少闭包和元编程有可能会导致DSL比使用动态语言创建来的更冗长。

但从光明的一面来看,通过使用Java,我们同时能利用强大且成熟的类似于Eclipse和IntelliJ IDEA的集成开发环境,由于这些集成开发环境“自动完成(auto-complete)”、自动重构(auto-reconstruct)和debug等特性,使得DSL的创建、使用和维护 来的更加简单。另外,Java5中的一些新特性(比如generic、varargs 和static imports)可以帮助我们创建比以往任何版本任何语言都简洁的API。

一般来说,使用Java编写的DSL不会造就一门业务用户可以上手的语言,而会是一种业务用户也会觉得易读的语 言,同时,从程序员的角度,它也会是一种阅读和编写都很直接的语言。和外部DSL或由动态语言编写的DSL相比有优势,那就是编译器可以增强纠错能力并标 识不合适的使用,而Ruby或Pearl会“愉快接受”荒谬的input并在运行时失败。这可以大大减少冗长的测试,并极大地提高应用程序的质量。然而, 以这样的方式利用编译器来提高质量是一门艺术,目前,很多程序员都在为尽力满足编译器而非利用它来创建一种使用语法来增强语义的语言。

利用Java来创建DSL有利有弊。最终,你的业务需求和你所工作的环境将决定这个选择正确与否。

二、Camel DSL

Camel使用一种Java领域特定的语言(Domain Specific Language,DSL)来创建企业集成模式(Enterprise Integration Patterns)或路由。Camel同时支持一种基于Spring的 XML 配置,以及 Scala DSL。

使用Java DSL的优点是你使用的IDE可以在你开始编写时,智能的实例代码,而不需要在大量的XML上浪费时间。Java DSL非常有表现能力,因为你可以在语言中混合搭配你自己的代码,来进行表达式或断言评估,或容易地添加自定义的处理模块。

DSL的主要入口有

  • CamelContext 用于创建一个Camel 路由规则库(routing rule base);
  • RouteBuilder 用于创建路由集合。

参考:

  • http://camel.apache.org/dsl.html
  • 说明: 这只是简单的概念介绍,详细的请参看 http://www.infoq.com/cn/articles/internal-dsls-java

转载于:https://www.cnblogs.com/JoannaQ/p/3448814.html

Java DSL简介(收集整理)相关推荐

  1. 夜夜肝到秃顶,2022年Java面试题目收集整理归纳

    开始的碎碎念 本文大多是各大企业的topN题目,针对java中高级开发,本文会持续收集更新内容,如果大家有优质的Java面试题,也欢迎大家来投稿. 特意整理出这个分类的目录,方便大家平时复习和收藏哈. ...

  2. Spring Integration Java DSL示例

    现在已经为Spring Integration引入了新的基于Java的DSL ,这使得可以使用基于纯Java的配置而不是基于Spring XML的配置来定义Spring Integration消息流. ...

  3. dsl java 语言_Java DSL简介(收集整理)

    一.领域特定语言(DSL) 领域特定语言(DSL)通常被定义为一种特别针对某类特殊问题的计算机语言,它不打算解决其领域外的问题.对于DSL的正式研究已经持续很多年,直 到最近,在程序员试图采用最易读并 ...

  4. 100道Java基础面试题收集整理(附答案)

    不积跬步无以至千里,这里会不断收集和更新Java基础相关的面试题,目前已收集100题. 1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序 C/S(Cl ...

  5. OC swift 一些常用第三方收集整理 (第三方集合)

    整理了Xcode好用的插件,包括OC和Swift,信息更详细和完整 下拉刷新 EGOTableViewPullRefresh– 最早的下拉刷新控件. SVPullToRefresh– 下拉刷新控件. ...

  6. 收集整理 GitHub 上高质量、有趣的开源项目,并将他们进行归类

    Awesome Github REPO Awesome GitHub Repo 会收集整理 GitHub 上高质量.有趣的开源项目,并将他们进行归类.值得注意的是,不是简单的按照编程语言来分类,而是按 ...

  7. 零基础快速学习Java技术的方法整理

    在学习java技术这条道路上,有很多都是零基础学员,他们对于java的学习有着很多的不解,不知怎么学习也不知道如何下手,其实Java编程涉及到的知识点还是非常多的,我们需要制定java学习路线图这样才 ...

  8. Java:计算机编程语言Java的简介、编程环境/工具、如何学习Java之详细攻略

    Java:计算机编程语言Java的简介.编程环境/工具.如何学习Java之详细攻略 目录 Java的简介 1.Java的工作原理--基于Eclipse等编程Java语言→定义Java类→Java虚拟机 ...

  9. Java经典面试题整理及答案详解(八)

    简介: Java经典面试题第八节来啦!本节面试题包含了进程.线程.Object类.虚拟内存等相关内容,希望大家多多练习,早日拿下心仪offer- 了解更多: Java经典面试题整理及答案详解(一) J ...

最新文章

  1. 图解ElasticSearch 搜索原理
  2. 【腾讯二面】5s内建立多少个mysql连接?
  3. IT人的八大修炼神器
  4. python官网下载步骤linux-linux如何安装python
  5. Redmonk 发布 Java 框架流行度调研结果
  6. ajax使用json下拉框,ajax请求后台得到json数据后动态生成树形下拉框的方法
  7. 连续 4 年成为“开发者最喜欢的语言”,这门编程语言你了解过吗?
  8. SAP Commerce Extension Module
  9. JS:1.3,函数(function)
  10. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置
  11. unity手机 通过php连接mysql_如何从Unity连接到数据库
  12. mysql stop salve_MySQL主从切换
  13. 《天勤数据结构》笔记——使用两个栈实现共享栈实现(C/C++)
  14. PHP 每日学习函数之 floatval 函数
  15. Ubuntu下调用opencv编程显示汉字
  16. java计算机毕业设计基于安卓Android的禁毒宣传APP(源码+系统+mysql数据库+Lw文档)
  17. Ubuntu升级glibc库
  18. [运放滤波器]3_反相同相比例放大电路_Multisim电路仿真
  19. 计算机应用论文评语大全,硕士学位论文评语大全
  20. Elasticsearch学习笔记:MUST_NOT not working with EXIST in NESTED query

热门文章

  1. python 示例_带有示例的Python date isocalendar()方法
  2. php curl form-data,在php curl multipart / form-data请求中发送一个文件和json数据
  3. hadoop put命令的格式_HDFS常用命令
  4. 2013_hangzhou_online
  5. uva 11714——Blind Sorting
  6. C++ wstring 与 string 之间的相互转换.
  7. java中日期计算时间差,java中依据,两个日期,计算时间差
  8. Win32项目关于MessageBox参数的详细说明
  9. 计算机网络【四】数据链路层基本概念+点到点通信(PPP协议)
  10. (NFS)mount.nfs: access denied by server while mounting localhost:/home/xuwq/minilinux/system