领域特定语言 (DSL) 和 领域驱动设计 (DDD)

12

领域特定语言 (DSL) 和 领域驱动设计 (DDD) 有什么异同之处?

10个回答

12

领域驱动设计(DDD)是一种思考和沟通问题及其解决方案的方式。

领域特定语言(DSL)是一种编写代码的方式。

它们相似,因为它们都以“领域”一词开头。就这样,我想。 :-)


11
虽然有趣,但我认为这个答案有些不准确。DSL 将使用与在同一领域实践 DDD 时得到的通用语言相同的语言,它们并非完全无关。 - Roger Johansson

7

领域驱动设计强调在创建系统的基本词汇、概念和对象模型时,问题领域的作用。

领域特定语言是一种用于指定或实现系统特定部分的符号表示法,其针对该领域从业者的需求进行优化(即最小化大多数编程或规范语言中的“程序员术语”方面)。


3
我认为它们在某种程度上是相关的,不仅仅因为“domain”这个词。一旦你拥有一个良好的(面向领域的)设计,它肯定会有助于创建一个坚实的DSL。
“DDD并不特别要求使用DSL,尽管它可以被用来帮助定义DSL。” - 维基百科

2

1

DDD 的一个要素可以被视为开发普遍语言以便与利益相关者谈论领域的能力。对于那些既不含糊又可能可执行的 UL 子集,您可以选择使用内部或外部 DSL 来实现它们。

这是我在 DomainDriven 网站上讨论此问题的视频:

http://domaindrivendesign.org/library/bell_gitlevich_2009

祝一切顺利, 彼得


0
在他的DSL Engineering book第2.5.2段中,Markus Voelter提供了一个很好的答案:
“实际上,DSL是Eric Evans领域驱动设计中普遍语言的形式化。”

0

0

这两种方法的不同之处在于,一种是使用特定领域语言(DSL)而非通用编程语言来构建系统的方法,另一种则是一种设计和构建系统的架构方法(DDD)。

它们的相似之处在于它们都专注于特定领域。


0

维基百科对DSL有一个非常明确的定义:

近年来,“领域特定语言”(DSL)一词在软件开发中变得流行,它表示专门用于解决特定问题领域、特定问题表示技术和/或特定解决方案技术的编程语言或规范语言。

这可以通过实现一组遵循某种一致模式的类来实现,也可以通过一些花哨的C++模板魔法或解析器/编译器,将自由文本输入解释为你想要的内容。


0

我认为它们在某种程度上是相关的(正如Christophe所说),但是两个完全不同的方面。我甚至不会驳回jop的陈述。

关于DSL的非常好的信息,请参考Martin Fowler有关DSL的一系列页面(正在进行中),您可以从示例定义开始。另一个很好的阅读材料是他的问答

DDD基于领域模型,通常比DSL高至少一个抽象级别。两者都可以独立存在,正如Christophe已经说过的,它们都可以在同一个项目中使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接