翻译:A DSL in 5 Languages(五种语言的DSL)

文章目录

  • 五种语言的DSL
  • 问题
    • 实例搜索准则
  • RUBY
    • 策略
    • 例子
    • 优势
  • python
    • 战略
    • 例子
    • 优势
    • 弱点
  • PHP
    • 战略
  • C#
  • java
  • 总结

英文原文见: https://blog.csdn.net/matlab2000/article/details/6006676

五种语言的DSL

我们为客户提供5种编程语言的客户库:Ruby、Python、PHP、Cype和Java。每个库都是用来帮助我们的客户提出请求、解析响应和从网关检索数据的。我们希望他们与Braintree进行简单、直观的整合。
维护5个客户端库意味着用5种语言编写基本相同的功能。在很多情况下,这仅仅意味着句法上的差异。然而,有些特性非常复杂,因此每个库中都应该使用稍微不同的方法。
一个例子是事务搜索。因为搜索可能有点复杂,所以我们决定在五个库中的每个库中创建一个领域特定语言(DSL)。

问题

我们希望事务搜索既容易阅读,又足够深以执行复杂的查询。具体地说,我们希望允许搜索3种不同类型的字段:

  • 文本字段(Text fields) — 查询精确匹配、不匹配、字符串开头、字符串结束和子字符串
  • 多个值字段(Multiple value fields) — 使用一组预定义值进行查询,并将返回匹配任何给定值的所有记录
  • 范围字段(Range fields)— 使用下限、上限或两者查询(都包含)
    将返回与所有标准匹配的资源集合。

实例搜索准则

下面的代码示例假设用户希望搜索满足以下条件的事务:

  • 订单ID以“A2D”开头
  • 客户网站以“.com”结尾
  • 计费第一名等于“约翰”
  • 身份被授权或解决
  • 金额在10到20美元之间

RUBY

策略

在Ruby中,搜索方法生成一个搜索对象到一个块。此对象包含构建搜索条件所需的方法。然后执行块,并根据结果生成请求。Ruby还重载了==,!=、>=和<=文本和范围搜索字段上的运算符。我们认为这可以提高可读性并减少语法噪声。

例子

collection = Braintree::Transaction.search do |search|search.order_id.starts_with "a2d"search.customer_website.ends_with ".com"search.billing_first_name == "John"search.status.in(Braintree::Transaction::Status::Authorized,Braintree::Transaction::Status::Settled)search.amount.between "10.00", "20.00"
endcollection.each do |transaction|puts transaction.id
end

优势

  • 方法调用中不需要括号,这样可以创建更可读的语法
  • 创建请求和执行搜索的单个步骤
  • 运算符重载提高了可读性

python

战略

我们的Python解决方案使用了不同的方法,因为该语言缺少块语法和多行lambda。搜索方法需要一个表示搜索条件的对象列表。这些对象中的每一个都是使用可读的方法名内联构建的。然后,搜索方法可以迭代所提供的对象以构建搜索请求。
和Ruby一样,这个实现重载操作符==,!=、>和<用于文本和范围字段上的操作。

例子

collection = Transaction.search([TransactionSearch.order_id.starts_with("a2d"),TransactionSearch.customer_website.ends_with(".com"),TransactionSearch.billing_first_name == "John",TransactionSearch.status.in_list([Transaction.Status.Authorized,Transaction.Status.Settled]),TransactionSearch.amount.between("10.00", "20.00")
])for transaction in collection.items:print transaction.id

优势

  • 创建请求和执行搜索的单个步骤
  • 易于动态创建条件
  • 运算符重载提高了可读性

弱点

  • 重复TransactionSearch类名
  • 文本列表作为参数

PHP

战略

PHP实现与上面描述的Python解决方案类似,但感觉不太可读。同样,search方法需要一个搜索条件对象的列表,并且这些对象是在方法调用期间以内联方式创建的。但是,类方法调用的::语法以及->operator-for-instance方法调用会使代码变得更加嘈杂。

(以下暂略)

C#

暂略

java

暂略

总结

一般来说,DSL实现有3种类型:Fluent接口、可读的内联方法参数和块。我们发现流畅的接口是静态语言最有效的方法。对于Python和PHP,可读的内联方法参数似乎是最惯用的。Ruby社区倾向于使用基于块的DSL,我们为Ruby实现选择了这种方法。
在5种不同的语言中解决相同的问题是一个非常宝贵的经验。虽然结果非常不同,但我们认为每个解决方案都是健壮的和可读的。更重要的是,用这些语言工作有助于我们从相对公正的角度了解每种语言的优缺点。
如果你是一个使用这些语言的开发人员,我们很乐意听到你的反馈。你将如何用你选择的语言处理这个问题?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 二维卷积知识图谱嵌入

链接&#xff1a;https://arxiv.org/pdf/1707.01476.pdf本文主要关注 KG Link prediction 问题&#xff0c;提出了一种多层卷积神经网络模型 ConvE&#xff0c;主要优点就是参数利用率高&#xff08;相同表现下参数是 DistMult 的8分之一&#xff0c;R-GCN 的 17 分之一&#x…

如何成为架构师?3条有效的实战经验

“ 希望你看完这一篇&#xff0c;能充分认知和了解架构师&#xff0c;认知对了&#xff0c;事就好办了。 01 架构师的准确定义 架构师的职责应该是立足于技术和业务之间的中间角色或者平衡点&#xff0c; 在针对业务深刻理解的基础上&#xff0c;针对业务中存在诸多变数&am…

ArchSummit2016干货分享+美团:即时物流调度平台实践+一点资讯:兴趣引擎-深度融合搜索和推荐+阿里-智能问答系统的实践

** 2015年7月 ** 加入滴滴打车3个半月&#xff0c;感觉遇到和解决的技术问题超过之前1年的。写在这里给大家分享。 滴滴这边负责所有策略算法设计的是“策略组”&#xff0c;大概有20几个员工。由于滴滴的业务线越来越多&#xff08;出租车&#xff0c;专车&#xff0c;快车&…

Windows10 virtualbox安装alpine+docker

文章目录概述试验环境和配置安装Alpine在Alpine安装Docker&#xff08;含Docker Compose&#xff09;概述 为了搭建小型计算系统和个人知识库&#xff0c;使用Alpine linuxDocker搭建运行容器。 试验环境和配置 使用Virtualbox安装Alpine linux&#xff0c;主机为Windows10A…

论文浅尝 | 使用变分推理做KBQA

Yuyu Zhang, Hanjun Dai, Zornitsa Kozareva, Alexander J.Smola, and Le Song: Variational Reasoning for Question Answering with KnowledgeGraph. AAAI 2018链接&#xff1a;https://arxiv.org/abs/1709.04071本文提出了一个可端到端训练的 KBQA 框架&#xff0c;可以在模…

史上最全Git学习教程

Git是世界上最先进的分布式版本控制系统&#xff0c;没有之一。 —— Git爱好者 Git 是一个「分布式版本管理工具」&#xff0c;其具备太多的优点&#xff1a;更方便的 Merge、更方便的管理、更健壮的系统、对网络的依赖性更低、更少的“仓库污染” 等等&#xff0c;这使得Git…

阿里P8架构师谈:深入探讨HashMap的底层结构、原理、扩容机制

摘要 HashMap是Java程序员使用频率最高的用于映射&#xff08;键值对&#xff09;处理的数据类型。 随着JDK&#xff08;Java Developmet Kit&#xff09;版本的更新&#xff0c;JDK1.8对HashMap底层的实现进行了优化&#xff0c;例如引入红黑树的数据结构和扩容的优化等。本文…

笔记:猎头如何在一周之内“摸清”一个行业

文章目录猎头告诉你&#xff1a;如何在一周内摸清一个行业&#xff1f;1. 圈定对应行业&#xff0c;或拓展至相关行业2.确定行业内 TOP5 或 TOP10 企业名单&#xff0c;并关注名单排序的标准&#xff0c;及近几年排名变化。3.锁定所列企业组织架构中的对应岗位的目标人选&#…

深入解析GBDT二分类算法(附代码实现)

目录&#xff1a; GBDT分类算法简介 GBDT二分类算法 2.1 逻辑回归的对数损失函数 2.2 GBDT二分类原理 GBDT二分类算法实例 手撕GBDT二分类算法 4.1 用Python3实现GBDT二分类算法 4.2 用sklearn实现GBDT二分类算法 GBDT分类任务常见的损失函数 总结 Reference 本文的主要…

论文浅尝 | 动态词嵌入

Citation: Bamler R, Mandt S. Dynamic word embeddings.InInternational Conference on Machine Learning 2017 Jul 17 (pp. 380-389).URL&#xff1a;http://proceedings.mlr.press/v70/bamler17a/bamler17a.pdf动机语言随着时间在不断演化&#xff0c;词语的意思也由于文化的…

滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型

国际数据挖掘领域的顶级会议 KDD 2018 在伦敦举行&#xff0c;今年 KDD 吸引了全球范围内共 1480 篇论文投递&#xff0c;共收录 293 篇&#xff0c;录取率不足 20%。其中滴滴共有四篇论文入选 KDD 2018&#xff0c;涵盖 ETA 预测 (预估到达时间) 、智能派单、大规模车流管理等…

Keyword-BERT——问答系统中语义匹配的杀手锏

引子 问&答 是人和人之间非常重要的沟通方式&#xff0c;其关键在于&#xff1a;我们要理解对方的问题&#xff0c;并给出他想要的答案。设想这样一个场景&#xff0c;当你的女朋友or老婆大人在七夕前一晚&#xff0c;含情脉脉地跟你说 亲爱的&#xff0c;七夕快到了&…

阿里P8架构师谈:Docker简介、组成架构、使用步骤、以及生态产品

Docker简介 Docker是DotCloud开源的、可以将任何应用包装在Linux container中运行的工具。 Docker基于Go语言开发&#xff0c;代码托管在Github上&#xff0c;目前超过10000次commit。 基于Docker的沙箱环境可以实现轻型隔离&#xff0c;多个容器间不会相互影响&#xff1b;D…

翻译:Docker方式安装redmine

原文见&#xff1a; https://docs.docker.com/samples/library/redmine/ 简单翻译整理。 文章目录1. 用SQLite3运行Redmine2. 使用数据库容器运行Redmine2.1. 启动数据库容器2.2. 启动redmine3. 通过docker stack deploy或docker-compose方式运行4. 访问应用程序4.1. 存储数据的…

研讨会 | 知识图谱前沿技术课程暨学术研讨会(武汉大学站)

知识图谱作为大数据时代重要的知识表示方式之一&#xff0c;已经成为人工智能领域的一个重要支撑。4月28日&#xff0c;“武汉大学信息集成与应用实验室”与“复旦大学知识工场实验室”联合举办“知识图谱前沿技术课程暨学术研讨会”&#xff0c;将结合知识图谱学界研究与业界应…

LayerNorm是Transformer的最优解吗?

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

观点 | 滴滴 AI Labs 负责人叶杰平教授:深度强化学习在滴滴的探索与实践+关于滴滴智能调度的分析和思考+滴滴派单和Uber派单对比

AI 科技评论按&#xff1a;7 月 29 日&#xff0c;YOCSEF TDS《深度强化学习的理论、算法与应用》专题探索报告会于中科院自动化所成功举办&#xff0c;本文为报告会第一场演讲&#xff0c;讲者为滴滴副总裁、AI Labs 负责人叶杰平教授&#xff0c;演讲题为「深度强化学习在滴滴…

笔记:企业内部因素评价

目录企业内部因素评价方法&#xff1a;IFE矩阵IFE矩阵介绍分析评价步骤影响企业关键内部因素选择企业内部控制应用指引列出的控制方面参考企业内部因素评价方法&#xff1a;IFE矩阵 对内部因素进行分析的工具&#xff0c;是内部因素评价矩阵&#xff08;Internal Factor Evalu…

消息中间件系列(二):Kafka的原理、基础架构、以及使用场景

一&#xff1a;Kafka简介 Apache Kafka是分布式发布-订阅消息系统&#xff0c;在 kafka官网上对 kafka 的定义&#xff1a;一个分布式发布-订阅消息传递系统。 它最初由LinkedIn公司开发&#xff0c;Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。Kafka是一种快速、…

丁力 | cnSchema:中⽂知识图谱的普通话

本文转载自公众号&#xff1a;大数据创新学习中心。3月10日下午&#xff0c;复旦大学知识工场联手北京理工大学大数据创新学习中心举办的“知识图谱前沿技术课程暨学术研讨会”上&#xff0c;OpenKG联合发起⼈、海知智能CTO丁力博士分享了以“cnSchema&#xff1a;中⽂知识图谱…