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

时间:2008-10-07 08:37:33

标签: c# .net domain-driven-design dsl

域特定语言(DSL)和域驱动设计(DDD)之间的差异和相似之处是什么?

10 个答案:

答案 0 :(得分:10)

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

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

他们是相似的,因为他们都以“域”这个词开头。就是这样,我想。 : - )

答案 1 :(得分:6)

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

我猜两者都有减少编程噪音的主要焦点,DDD在句法噪音中作用于语义噪音和DSL。

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

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

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

答案 4 :(得分:1)

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

以下是我在DomainDriven网站上讨论此内容的视频:

http://domaindrivendesign.org/library/bell_gitlevich_2009

祝福, 彼得

答案 5 :(得分:0)

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

  

术语特定于域的语言   (DSL)最近变得流行   多年的软件开发到   表示编程语言或   专用于a的规范语言   特别是问题领域,   特别的问题表示   技术,和/或特定的   解决方案技术。

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

答案 6 :(得分:0)

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

有关DSL的书面信息,请参阅Martin Fowler's set of pages on DSLs(正在进行的工作),您可以从exampledefinition开始。另一个好的读物是他的QandA

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

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

  

DDD并不特别要求使用DSL,尽管它可能是   用于帮助定义DSL和支持诸如特定于域的方法   多模型化。

答案 9 :(得分:0)

Markus Voelter在他的DSL Engineering book 2.5.2思考和交流工具 中提供了很好的答案:

实际上,DSL是 埃里克·埃文斯(Eric Evans)领域意义上的无所不在的语言 驱动设计。