![]() |
1
17
DSL在需要将系统控制的某些方面交给其他人的情况下是很好的。我已经在规则引擎中使用了它们,在那里您创建了一种简单的语言,这种语言对于不太专业的人来说更容易表达自己,特别是在工作流中。 换句话说,不是让他们学习Java:
我可以写一个DSL,让我说:
还有其他的情况,但基本上,任何你想使用宏语言、编写工作流脚本或允许售后定制的地方——这些都是DSL的候选者。 |
![]() |
2
6
DSL
代表
特定于域的语言
即专门为解决特定领域问题而设计的语言。
就我个人而言,我几乎在我正在进行的每一个大型项目中都为DSL找到了一个位置。通常我需要一些类似SQL的查询语言。另一个常见用法是基于规则的系统,您需要某种语言来指定规则\条件。 DSL在难以用传统方法描述解决问题的环境中是有意义的。 |
![]() |
3
4
如果使用Microsoft Visual Studio,则已经使用了多个DSL——Web窗体、WinForms等的设计图面是DSL。类设计器是另一个例子。 DSL只是一组工具(至少在理论上)使特定“领域”(即可视布局)的开发更容易、更直观和更高效。 就构建DSL而言,Ayende这样的人写的一些东西与“文本解析”DSL相关,允许开发人员(或最终用户)将“自然文本”输入到应用程序中,该应用程序解析文本并基于文本生成某种代码或输出。 您可以使用任何语言来构建自己的DSL。Microsoft Visual Studio有许多扩展点,以及模式和实践 "Guidance Automation Toolkit" 和 Visual Studio SDK 可以帮助您向Visual Studio添加DSL功能。 |
![]() |
4
2
DSL是自定义语言的基本编译器。一个好的“自由和开放”的开发工具可在 ANTLR . 最近,我一直在看这个DSL state machine language 用于新项目。我同意上面提到的TimHowland,他们可以是让其他人自定义您的应用程序的好方法。 |
![]() |
6
1
DSL只是一个花哨的名字,可能意味着不同的东西:
这种炒作的一个重要方面是:从语言的角度考虑你的应用程序是有意义的。你想在应用程序中谈论什么?然后这些应该是您的类和方法:
|
![]() |
7
0
DSL基本上是创建自己的小子语言来解决特定的领域问题。这是通过方法链接来解决的。点和括号可选的语言有助于使这些表达式看起来更自然。它也可以类似于构建器模式。 DSL不是语言本身,而是一种应用于API的模式,使调用更具自解释性。 一个例子是Guice, Guice Users Guide http://docs.google.com/View?docid=dd2fhx4z_5df5hw8 对接口如何绑定到实现以及在什么上下文中进行了进一步的描述。 另一个常见的例子是查询语言。例如:
在实现中,设想每个方法返回一个新的查询对象,或者只在内部进行更新。在任何时候,您都可以使用例如rows()来终止链,以获取所有行,或者像我在上面所做的那样更新somefield。两者都将返回一个结果对象。 我建议您也看一下上面的guice示例,因为那里的每个调用都返回一个新类型,其中包含新的选项。一个好的IDE可以让你完成,让你清楚地知道在每一点上你有哪些选择。 编辑:似乎很多人认为DSL是新的、简单的、有自己的解析器的单用途语言。我总是将DSL关联为使用方法链接作为表示操作的约定。 |
|
goofy126 · 计算理论-DFA[闭合] 7 年前 |
![]() |
Marcos · 是否有一个术语来描述只应使用最后一个值的表格? 7 年前 |
|
ZhaiNan · 这能在O(N log(N))时间内解决3SUM吗? 7 年前 |
![]() |
Kishore · 如何证明(g(n))=O(g(n))(g(n)) 7 年前 |
![]() |
NaSh · 求图中局部最小值/最大值的爬山算法的时间复杂度 9 年前 |
![]() |
magic-sudo · 排序arrya的最有效方法[已关闭] 10 年前 |
![]() |
Dan Drews · 为什么替身能像他们那样工作 11 年前 |