10

领域特定语言 (DSL) 和领域驱动设计 (DDD) 之间有什么区别和相似之处?

4

10 回答 10

11

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

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

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

于 2008-10-07T08:50:54.977 回答
6

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

领域特定语言是一种用于指定或实现系统特定部分的符号,面向该领域从业者的需求(即最小化大多数编程或规范语言的“程序化”方面)。

于 2008-10-07T12:38:37.017 回答
3

我认为它们在某种程度上是相关的,而不仅仅是“域”这个词。一旦你有了一个好的(领域驱动的)设计,它肯定会有助于创建一个可靠的 DSL。

“DDD 并不特别要求使用 DSL,尽管它可以用来帮助定义 DSL。” - 维基百科

于 2008-10-07T09:31:26.707 回答
2

我想两者都主要关注减少编程中的噪音,DDD 作用于语义噪音和 DSL 的句法噪音。

这些可能有助于理解我的观点:

http://fragmental.tw/2009/03/12/expessive-design-slides/

http://fragmental.tw/2008/04/20/domain-specific-languages-and-video-games/

于 2010-10-06T00:40:24.647 回答
1

DDD 的一个要素可以看作是开发通用语言以与利益相关者讨论领域的能力。对于那些既明确又可能可执行的 UL 子集,您可以选择使用内部或外部 DSL 来实现它们。

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

http://domaindrivendesign.org/library/bell_gitlevich_2009

最好的祝愿,彼得

于 2010-05-09T20:14:03.277 回答
0

Wikipedia 对DSL有一个非常明确的定义:

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

这可以实现为一组遵循某种一致模式的类、一些花哨的 C++ 模板魔术,或者解释自由文本输入以执行您想要的操作的编译器/解析器。

于 2008-10-07T09:36:35.713 回答
0

我认为它们在某种程度上是相关的(正如克里斯托夫所说),但是两个完全不同的方面。我什至不会驳回乔普的说法。

有关 DSL 的非常好的书面信息,请参阅Martin Fowler 的关于 DSL 的页面集(正在进行中),您可以从示例定义开始。另一个好读物是他的QandA

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

于 2008-10-07T10:43:21.693 回答
0

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

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

于 2008-12-07T01:16:34.777 回答
0

维基百科(https://en.wikipedia.org/wiki/Domain-driven_design)有一个很好的答案:

DDD 并不特别要求使用 DSL,尽管它可用于帮助定义 DSL 并支持特定领域的多模型等方法。

于 2019-05-30T07:40:00.313 回答
0

Markus Voelter 在他的DSL 工程书籍2.5.2 段 A Thinking and Communication Tool中提供了很好的答案:

实际上,DSL 是 Eric Evans 的领域驱动设计意义上的通用语言的形式化。

于 2020-01-07T04:34:10.727 回答