领域专用语言(DSL)和领域驱动设计(DDD)

本文关键字:DDD 专用 DSL 语言 | 更新日期: 2023-09-27 17:47:46

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

领域专用语言(DSL)和领域驱动设计(DDD)

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

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

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

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

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

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

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

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

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

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

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

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

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

http://domaindrivendesign.org/library/bell_gitlevich_2009

祝福,Peter

维基百科对DSL有一个非常清晰的定义:

术语领域特定语言(DSL)最近很流行多年的软件开发经验指示编程语言或专用于特定问题域,a特定问题表示技术和/或特定解决方案技术。

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

我认为它们在某种程度上是相关的(正如Christophe所说),但有两个完全不同的方面。我甚至不会否定周的说法。

有关DSL的详细信息,请参阅Martin Fowler关于DSL的一组页面(正在进行的工作),您可以从示例或定义开始。另一本好书是他的《坎达》。

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

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

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

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

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

Markus Voelter在他的DSL工程书中提供了一个不错的答案,段落2.5.2思考和沟通工具

实际上,DSL是埃里克·埃文斯领域意义上的普遍语言驱动设计。