什么是DSL,我应该在哪里使用它?

cru*_*ble 20 theory dsl

我越来越多地听到有关领域特定语言被抛出以及它们如何改变你对待业务逻辑的方式,我看过Ayende的博客帖子和事情,但我从来没有真正理解为什么我会接受我的业务远离我在提供者中使用的方法和情况的逻辑.

如果你有一些使用这些东西的背景,你有可能把它放在真正的外行术语中:

  • 究竟构建DSL究竟意味着什么?
  • 你用的是哪种语言?
  • 使用DSL有意义吗?
  • 使用DSL有什么好处?

Tim*_*and 18

在需要将系统控制权的某些方面提供给其他人的情况下,DSL是很好的.我在Rules Engines中使用过它们,在那里你创建了一种简单的语言,这种语言对于技术水平较低的人来说更容易表达自己 - 特别是在工作流程中.

换句话说,而不是让他们学习java:

DocumentDAO myDocumentDAO = ServiceLocator.getDocumentDAO();
for (int id : documentIDS) {
Document myDoc = MyDocumentDAO.loadDoc(id);
if (myDoc.getDocumentStatus().equals(DocumentStatus.UNREAD)) {
    ReminderService.sendUnreadReminder(myDoc)
}
Run Code Online (Sandbox Code Playgroud)

我可以写一个让我说的DSL:

for (document : documents) {
if (document is unread) {
 document.sendReminder
}
Run Code Online (Sandbox Code Playgroud)

还有其他情况,但基本上,您可能想要使用宏语言,脚本工作流程或允许售后市场定制 - 这些都是DSL的候选者.

  • 希望您知道您的DSL是python。 (2认同)

aku*_*aku 7

DSL代表领域特定语言,即专门为解决特定领域的问题而设计的语言.
例如,Markdown(用于编辑SO上的帖子的标记语言)可以被视为DSL.

就个人而言,我几乎在我正在进行的每个大型项目中都找到了DSL的地方.通常我需要某种类似SQL的查询语言.另一种常见用法是基于规则的系统,您需要某种语言来指定规则\条件.

DSL在传统方式难以描述\解决问题的环境中是有意义的.


Guy*_*uck 5

如果您使用 Microsoft Visual Studio,那么您已经在使用多个 DSL——Web 表单、winforms 等的设计界面是一个 DSL。类设计器是另一个例子。

DSL 只是一组工具(至少在理论上)使特定“领域”(即可视化布局)中的开发更容易、更直观、更高效。

至于构建 DSL,像 Ayende 这样的人写的一些东西与“文本解析”dsls 有关,让开发人员(或最终用户)将“自然文本”输入到应用程序中,该应用程序解析文本并生成某种基于它的代码或输出。

您可以使用任何语言来构建您自己的 DSL。Microsoft Visual Studio 有很多扩展点,模式和实践“Guidance Automation Toolkit”Visual Studio SDK可以帮助您将 DSL 功能添加到 Visual Studio。